특정 PNG 이미지를 찾아 이름을 바꿉니다.

특정 PNG 이미지를 찾아 이름을 바꿉니다.

다른 하위 디렉터리에 있는 여러 파일을 찾아서 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구현 에서는 이를 수행하지 않을 수 있습니다). 위 명령에서는 이 사실을 사용하여 디렉터리 경로를 지정하지 않고 파일 이름을 다음으로 바꿉니다 ../findlogo.pngoldlogo.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%/*}경로 이름의 디렉터리 부분을 반환합니다./$pathnamedirname "$pathname"

관련 정보