다음은 경로에서 1일보다 오래되었고 이름 기준과 일치하는 폴더를 확인하는 것입니다. 발견되면 해당 폴더는 휴지통 폴더로 이동됩니다.
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash \;
끝에 "_renamed"가 포함되도록 폴더 이름을 수정해야 합니다.
mv에서 중괄호를 사용할 수 있다고 생각했지만 이제 전체 폴더 경로도 필요하다는 것을 깨달았습니다.
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash/{}_renamed \;
경로를 복사하지 않고 폴더 경로를 수정할 수 있는 방법이 있나요?
답변1
예, find
파일 이름이 아닌 경로 이름에 대해 작동합니다.
두 가지 간단한 솔루션이 있습니다.
경로 이름의 파일 이름 부분을 추출하여
mv
.find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \ -maxdepth 1 -type d -mtime +1 \ -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \ -exec sh -c 'mv "$1" "/Users/myname/Desktop/backups/trash/${1##*/}_renamed"' sh {} ';'
여기서는
${1##*/}
와 마찬가지로 스크립트에 지정된 경로 이름$( basename "$1" )
입니다 .$1
sh -c
find
구현에서 이를 지원하는 경우
-execdir
대신 사용할 수 있습니다. 사용되면 주어진 명령은 발견된 프로젝트의 상위 폴더에서 실행되며 프로젝트의 기본 이름(BSD 사용) 또는 기본 이름 접두어(GNU 사용)가 됩니다.-exec
find
-execdir
{}
find
./
find
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \ -maxdepth 1 -type d -mtime +1 \ -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \ -execdir mv {} /Users/myname/Desktop/backups/trash/{}_renamed ';'
관련된: