現在私は以下を持っています:
@find . -type f -name "img*_01.png" -print0 | python script.py -f {}
このように最後のいくつかの文字を切り取る方法はありますか?
@find . -type f -name "img*_01.png" -print0 | python script.py -f {}.rightTrim(n)
答え1
あなたが意味すると仮定すると:
find . -type f -name "img*_01.png" -print0 |
xargs -r0I{} python script.py -f {}
なしxargs
で完了するために使用できません。xargs
右トリム()オペレーター。キャンセルして(、構文)xargs
などの操作を実行できます。bash
zsh
find . -type f -name "img*_01.png" -print0 |
while IFS= read -rd '' file; do
python script.py -f "${file%?????}"
done
または保持しますが、xargs
シェルを呼び出して剪定を実行します。
find . -type f -name "img*_01.png" -print0 | xargs -r0 sh -c '
for file do
python script.py -f "${file%?????}"
done' sh
ただし、この場合は標準-exec {} +
構文を使用することもできます。
find . -type f -name "img*_01.png" -exec sh -c
for file do
python script.py -f "${file%?????}"
done' sh {} +
あるいは、(フルファイル名が不要な場合)、各ファイル名の最後の5文字を切り捨てるコマンドで出力をパイプします。
sed -zE 's/.{5}$//' # assuming recent GNU sed
または
awk -v RS='\0' -v ORS='\0' '{print substr($0,1,length-5)}'
awk
(GNUまたは最新バージョンを想定mawk
)。
GNUシステムでは、デフォルトの単一タスクユーティリティを使用してこれを行うこともできます。
tr '\n\0' '\0\n' | rev | cut -c 6- | rev | tr '\n\0' '\0\n'
そして常に以下がありますperl
。
perl -0 -pe 's/.{5}$//'
perl -0 -lpe 'chop;chop;chop;chop;chop'
perl -0 -lpe 'substr($_,-5,5,"")'