안녕하세요, 동일한 디렉터리 수준( 예:)과 동일한 디렉터리( 또는) 라는 다른 하위 디렉터리에 여러 이미지( jpg
및 ) 가 있는 폴더가 많이 있습니다 .png
./ParentDirectory/contents/1680x1050.png
1680x1050.jpg
1680x1050.png
find
명령을 사용하여 이 파일을 다른 디렉터리(예: ./Something/
)에 복사하여 이름을 유지하면서 파일 이름에 상위 이름을 추가하여 결국에는 ./Something/ParenDirectory_1680x1050.jpg
sum 이 되도록 할 수 있는지 궁금합니다 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
이미지 경로는 발견된 각각의 또는 새로운 쉘 프로세스에 대해 실행되는 섹션의 쉘 스크립트에 인수로 전달됩니다.png
jpg
{}
$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
.