有3个txt文件,名为1.txt 2.txt 3.txt
我要使用通配符*成批复制名称为1.txt.cp 2.txt.cp 3.txt.cp
我输入命令cp *.txt *.txt.cp,但它不工作...
cp :目标*.txt.cp :不是目录,出什么问题了?
发布于 2021-10-27 11:44:48
用法:for i in *.txt; do cp "$i" "$i.cp"; done
示例:
$ ls -l *.txt
-rw-r--r-- 1 halley halley 20 out 27 08:14 1.txt
-rw-r--r-- 1 halley halley 25 out 27 08:14 2.txt
-rw-r--r-- 1 halley halley 33 out 27 08:15 3.txt
$ ls -l *.cp
ls: could not access '*.cp': File or directory does not exist
$ for i in *.txt; do cp "$i" "$i.cp"; done
$ ls -l *.cp
-rw-r--r-- 1 halley halley 20 out 27 08:32 1.txt.cp
-rw-r--r-- 1 halley halley 25 out 27 08:32 2.txt.cp
-rw-r--r-- 1 halley halley 33 out 27 08:32 3.txt.cp
$ for i in *.txt; do diff "$i" "$i.cp"; done
$ 发布于 2021-10-27 11:58:20
如果你习惯了MS/Windown shell,重要的是要注意到Unix系统对通配符的处理是非常不同的。MS/Windows保留了MS/DOS规则,即不解释通配符,而是将通配符传递给命令。该命令可以看到通配符,并可以将命令中的第二个*处理为注意第一个匹配的位置,从而使copy ab.* cd.*变得合理。
在Unix (以及Linux等衍生系统)中,shell负责处理通配符,并用所有可能的匹配项替换任何包含通配符的单词。好消息是,指挥部不必关心这一点。但缺点是,如果当前文件夹包含ab.txt ab.md5 cd.jpg,命令copy ab.* cd.*将被转换为copy ab.txt ab.md5 cd.jpg,这可能不是您所期望的……
潜在的原因是Unix shell比旧的继承了CMD.EXE的好的MS/DOS更通用,并且有简单易用的for和if复合命令。只需查看@Halley的answer,即可了解您的用例语法。
https://stackoverflow.com/questions/69737441
复制相似问题