
次のサブフォルダーを含む既定のフォルダーがあります。
- 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