재귀적으로 폴더 이름을 @eaDir로 바꿉니다.

재귀적으로 폴더 이름을 @eaDir로 바꿉니다.

GitHub에서 찾은 썸네일 생성기 Python 스크립트를 사용하려고 하는데 정말 잘 작동합니다.

이름이 지정된 폴더에 썸네일을 생성한 eaDir_temp다음 터미널에서 NAS의 이름을 바꿔야 합니다 @eaDir. 저자는 이에 대해 다음과 같은 명령을 제공합니다.

find . -type d -name 'eaDir_tmp' -exec mv '{}' @eaDir \;

안타깝게도 사진이 포함된 모든 하위 폴더에 대해 다음이 반환됩니다.

mv: cannot move ‘./subfolder/eaDir_tmp’ to ‘@eaDir/eaDir_tmp’: Directory not empty

나는 무엇을 해야 합니까?

답변1

궁금한 사람들을 위해 어떤 일이 일어날 수 있는지: 명령

find . -type d -name 'eaDir_tmp' -exec mv '{}' @eaDir \;

찾은 각 ./whatever/eaDir_tmp디렉토리(예: 구성 요소 ) eaDir_tmp를 현재 작업 디렉토리로 이동합니다: ./whatever/eaDir_tmp./@eaDir. ( 경로 구성 요소는 현재 작업 디렉터리를 기준으로 @eaDir간주되기 때문입니다.)mv

처음에는 ./@eaDir아직 존재하지 않는 경우 생성됩니다.

두 번째로 ./whatever/eaDir_tmp찾은 것은 이사했습니다입력하다 ./@eaDir, 왜냐하면 이 시점에서 주어진 대상 디렉터리 mv( )가 이미 존재하기 때문입니다: → .@eaDir./whatever/eaDir_tmp./@eaDir/eaDir_tmp

추가 검색도 ./subfolder/eaDir_tmp이동됩니다. 이 단계는 이미 존재하고 비어 있지 않기 때문에 실패합니다../@eaDir./@eaDir/eaDir_tmp


당신이 할 수 있는 일: find구현이 다음을 지원하는 경우 -execdir:

find . -depth -type d -name 'eaDir_tmp' -execdir mv '{}' @eaDir \;

-deptheaDir_tmp이는 실제로 중첩된 디렉터리 (예 : ) 의 경우에만 필요합니다 ./whatever/eaDir_tmp/whatever/eaDir_tmp.

대신 -exec, 현재 작업 디렉터리 -execdir가 아닌 일치하는 파일이 포함된 디렉터리에서 find지정된 명령을 실행합니다 .

find비표준을 지원하지 않는 경우 -execdir:

find . -depth -type d -name 'eaDir_tmp' \
  -exec sh -c 'mv "$1" "${1%/*}/@eaDir"' mysh {} \;

또는 발견된 모든 디렉터리에 대해 셸을 시작하지 마세요.

find . -depth -type d -name 'eaDir_tmp' -exec sh -c '
  for dir
  do
    mv "$dir" "${dir%/*}/@eaDir"
  done' mysh {} +

관련 정보