저는 더 작은 크기의 모든 이미지 파일을 찾아 디렉터리로 이동하는 스크립트(또는 한 줄짜리)를 작성하려고 합니다. 기반으로이 답변은 Ask Ubuntu에서 나왔습니다., 두 크기가 모두 500 미만인 파일 목록을 생성할 수 있었습니다.일반적인 이미지 파일도 모두 찾을 수 있습니다.jpg
.
find -E . -regex ".*\.(jpg|gif|png|jpeg)" -type f -exec identify -format '%w %h %i\n' '{}' \; | awk '$1<500 && $2<500' | awk '{print $3}'
두 번째 awk
는 내가 원하는 파일 이름만 인쇄한다는 것입니다 mv
. 이 출력을 어떻게 에 넣을 수 있습니까 mv
?
첫 번째 출력의 예는 다음 awk
과 같습니다.
123 456 ./smallimage.jpg
333 333 ./square.png
두 번째는 awk
방금 주어졌습니다.
./smallimage.jpg
./square.png
mv
그러나 필요한 최종 명령은 다음과 같은 형식이기 때문에 이 파일 이름 목록을 명령에 대한 입력으로 가져오는 방법을 찾을 수 없는 것 같습니다.mv <file list> ./small_images/
답변1
다음 기능을 사용하여 병합 mv
되었습니다 .awk
system()
awk '$1<500 && $2<500 {system("mv "$3" /destination")}
mv
필요에 맞게 명령을 변경합니다 . 여기서는 다음을 사용했습니다.
mv /file_(third_field)_from_awk /destination
또한 여러 개가 필요하지 않으며 awk
위에 표시된 대로 하나만 있으면 충분합니다.
답변2
파일 이름에 개행 문자가 포함되어 있지 않다고 가정하면 GNU mv
와 xargs
프로그램을 사용하여 이를 수행할 수 있습니다.
... | awk ... | xargs -d'\n' mv -t ./small_images
xargs는 입력에서 파일 이름을 수집하여 명령에 추가하고 mv -t ./small_images
필요에 따라 매우 긴 명령을 분할합니다. 명령 시작 부분에 대상 디렉터리를 지정하거나 이를 처리하기 위한 작은 스크립트를 작성할 mv
수 있는 버전이 필요합니다 .-t