find를 사용하여 디렉터리 이름을 휴지통 디렉터리로 바꿉니다.

find를 사용하여 디렉터리 이름을 휴지통 디렉터리로 바꿉니다.

다음은 경로에서 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파일 이름이 아닌 경로 이름에 대해 작동합니다.

두 가지 간단한 솔루션이 있습니다.

  1. 경로 이름의 파일 이름 부분을 추출하여 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" )입니다 .$1sh -cfind

  2. 구현에서 이를 지원하는 경우 -execdir대신 사용할 수 있습니다. 사용되면 주어진 명령은 발견된 프로젝트의 상위 폴더에서 실행되며 프로젝트의 기본 이름(BSD 사용) 또는 기본 이름 접두어(GNU 사용)가 됩니다.-execfind-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 ';'
    

관련된:

관련 정보