"find"의 파일 이름에서 경로 명령을 제외합니다.

"find"의 파일 이름에서 경로 명령을 제외합니다.

다음 하위 폴더가 포함된 기본 폴더가 있습니다.

  • 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

관련 정보