find 명령을 사용하여 이름 복사 및 변경

find 명령을 사용하여 이름 복사 및 변경

안녕하세요, 동일한 디렉터리 수준( 예:)과 동일한 디렉터리( 또는) 라는 다른 하위 디렉터리에 여러 이미지( jpg및 ) 가 있는 폴더가 많이 있습니다 .png./ParentDirectory/contents/1680x1050.png1680x1050.jpg1680x1050.png

find명령을 사용하여 이 파일을 다른 디렉터리(예: ./Something/)에 복사하여 이름을 유지하면서 파일 이름에 상위 이름을 추가하여 결국에는 ./Something/ParenDirectory_1680x1050.jpgsum 이 되도록 할 수 있는지 궁금합니다 ParenDirectory_1680x1050.png.

답변1

cd상위 디렉토리를 입력한 후 다음을 ParentDirectory실행합니다.

find ParentDirectory -type f \( -name "1680x1050.png" -o -name "1680x1050.jpg" \) \
  -exec sh -c 'cp "$1" "Something/${1%%/*}_${1##*/}"' sh {} \;

-exec이미지 경로는 발견된 각각의 또는 새로운 쉘 프로세스에 대해 실행되는 섹션의 쉘 스크립트에 인수로 전달됩니다.pngjpg{}$1

명령 에서 cp대상 파일 이름을 모아 ${1%%/*}상위 디렉터리 이름을 가져오는 데 사용하고 가장 긴 접미사 패턴(첫 번째 이후의 모든 문자 /)을 제거하고 ${1##*/}파일 이름 부분을 가져오는 데 사용하여 가장 긴 접두사 패턴(마지막까지)을 제거합니다. 성격 /).

동일한 결과를 얻기 위해 발견된 모든 이미지에 대해 하나의 셸 프로세스만 실행하려면 다음을 사용할 수 있습니다.

find ParentDirectory -type f \( -name "1680x1050.png" -o -name "1680x1050.jpg" \) \
  -exec sh -c 'for i; do cp "$i" "Something/${i%%/*}_${i##*/}"; done' sh {} +

그리고 -loop를 사용하여 스크립트의 모든 파일 이름 매개변수를 반복합니다 for.

관련 정보