다음 하위 폴더가 포함된 기본 폴더가 있습니다.
- f1
- f2
각 하위 폴더에는 jpeg/jpg 파일이 있습니다. 이렇게 하면 다음 find . -maxdepth 2 -type f -iname '*.jp*g'
과 같은 결과가 나옵니다.
- ./f1/IM_48902.jpg
- ./f1/IM_48903.jpg
- ./f2/IM_48900.jpg
- ./f2/IM_48904.jpg
출력에서 "/f1" 및 "/f2"를 제외하고 이와 같은 출력을 얻으려면 어떻게 해야 합니까?
- ./IM_48902.jpg
- ./IM_48903.jpg
- ./IM_48900.jpg
- ./IM_48904.jpg
[UPD] 내 완전한 스크립트는find . -maxdepth 2 -type f -iname '.jpg' ! -path "/excluded/" -print0 | xargs -I{} -0 -n1 -P3 sh -c 'exiv2 -q -K Xmp.dc.creator -K Xmp.photoshop.Credit -Pv "$1" > "/Users/adm/Desktop/$1.out"' -- {}
답변1
GNU 찾기를 사용하면 이 -printf
작업을 사용합니다. 바라보다man find
find . -maxdepth 2 -type f -iname '*.jp*g' -printf "%f\n"
답변2
find . -maxdepth 2 -type f -iname '*.jp*g'
일반적으로 다음을 통해 출력을 실행할 수 있습니다 sed
.
% mkdir f1 f2; touch f1/abc f2/def
% find . -type f |sed -e 's:.*/:./:'
./def
./abc
sed -z
그러나 NUL로 구분된 "줄"을 사용하여 이 작업을 수행해야 하는 경우 GNU sed 사용 과 같이 해당 기능을 지원하는 sed가 필요합니다 .
또는 나중에 확장을 통해 셸 명령에서 접두사를 제거하여 ${var##pattern}
값에서 가장 긴 일치 접두사를 제거할 수 있습니다.
$ find . -type f -print0 | xargs -I{} -0 sh -c 'echo "./${1##*/}"' -- {}
./def
./abc