目前我有:
@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
但调用 shell 来进行修剪:
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)}'
(假设 GNUawk
或最新版本的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,"")'