find의 순서를 변환합니다... -exec

find의 순서를 변환합니다... -exec

파일과 디렉터리의 이름을 바꾸고 싶습니다. 모든 ä것을 로 변환하려고 하는데 a로 변환했다고 가정해 보겠습니다 Järjestelmä/Säätimet. 그래서 나는 그런 말을 합니다 find -exec rename 's/ä/a/g'. 이제 더 이상 찾을 수 없다고 불평 하도록 find변환 됩니다 .JärjestelmäJarjestelmaJärjestelmä

exec이 문제는 명령 을 실행하는 순서를 바꾸면 해결될 것입니다. 가능합니까? 그렇지 않다면 올바른 접근 방식은 무엇입니까?

더 이상 아무것도 변경되지 않을 때까지 명령을 다시 실행할 수 있으므로 큰 문제는 아닙니다. 어쨌든, 이것은 나를 짜증나게 한다.

답변1

매뉴얼 페이지의 옵션을 사용하십시오 find.-depth

-depth Process each directory's contents before the  directory  itself.
          The -delete action also implies -depth.

이렇게 하면 Säätimet이전에 처리되며 방금 이름을 변경했기 때문에 다운될 수 없다고 불평하지 않습니다 Järjestelmä.Järjestelmä

전체 경로의 처리를 방지하려면 renameBSD 및 GNU와 같은 -execdir일부 구현에서 사용하십시오 find(디렉토리를 변경하고 마지막 부분만 명령 인수에 전달합니다 {}( ./일부 구현의 접두사 사용).

mkdir Järjestelmä
touch Järjestelmä/Säätimet
find . -depth -execdir rename 's/ä/a/g' {} \;
find .

다음을 제공합니다:

./Jarjestelma
./Jarjestelma/Saatimet

관련 정보