다른 하위 디렉터리에 있는 여러 파일을 찾아서 logo.png
이름을 로 변경해야 합니다 oldlogo.png
. 어떻게 해야 합니까?
파일(각 파일의 크기는 56431바이트)을 찾기 시작했지만 logo.png
동일한 하위 디렉터리의 다른 파일로 이동하는 방법을 모르겠습니다.
파일을 찾는 방법은 다음과 같습니다.
find -name logo.png -size 56431c
답변1
find
명령이 이름을 바꾸려는 파일을 정확히 찾았다 고 가정하면 다음 mv
과 같은 호출을 사용하여 해당 파일의 이름을 바꿀 수 있습니다 .find
-execdir
find . -name logo.png -size 56431c -execdir mv {} oldlogo.png \;
이 -execdir
술어는 비표준이지만 종종 구현됩니다. 파일 이름으로 대체 된 이름이 있는 디렉토리에서 주어진 유틸리티를 실행합니다 {}
(GNU는 파일 이름 앞에 추가하지만 다른 find
구현 에서는 이를 수행하지 않을 수 있습니다). 위 명령에서는 이 사실을 사용하여 디렉터리 경로를 지정하지 않고 파일 이름을 다음으로 바꿉니다 ../
find
logo.png
oldlogo.png
Standard 를 사용하면 find
다음과 같은 작업을 수행할 수 있습니다.
find . -name logo.png -size 56431c -exec sh -c '
for pathname do
mv "$pathname" "${pathname%/*}/oldlogo.png"
done' sh {} +
위의 코드는 sh -c
발견된 파일의 경로명을 일괄 호출합니다. 인라인 스크립트는 주어진 경로 이름 배치를 반복하고 각 경로 이름을 oldlogo.png
발견된 것과 동일한 디렉토리 로 이름을 바꿉니다 find
. 매개변수 대체는 값에서 마지막 항목과 그 뒤의 모든 항목을 제거하므로 ${pathname%/*}
경로 이름의 디렉터리 부분을 반환합니다./
$pathname
dirname "$pathname"