如何跳过此循环?

时间:2018-06-27 11:57:00

标签: bash shell

我有以下代码:

for i in *.txt; do cp $i ./${i%%.*}.text; done

但我遇到的问题是,我希望使用完全相同的命令而不使用循环。 有人可以帮我吗? 香港专业教育学院尽一切可能解决此问题,但我找不到解决办法。

谢谢

2 个答案:

答案 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