我有以下代码:
for i in *.txt; do cp $i ./${i%%.*}.text; done
但我遇到的问题是,我希望使用完全相同的命令而不使用循环。 有人可以帮我吗? 香港专业教育学院尽一切可能解决此问题,但我找不到解决办法。
谢谢
答案 0 :(得分:2)
使用GNU sed
,您可以使用
printf '%s\0' *.txt | sed -z 's/\.txt$//' | xargs -0 -n1 -I_ cp _.txt _.text
这是安全的,即使文件名包含换行符。
xargs
似乎比for
循环快。我测试如下:
$ mkdir test
$ cd test
$ touch {0..9999}.{txt,text}
$ time printf ... xargs ...
6.6 s
$ time for ... do ...
13.5 s
答案 1 :(得分:-1)
您可以尝试使用xargs,类似于:
ls *.txt | xargs -n 1 -I{} cp {} ./${{}%%.*}.text