我正在尝试移动扩展名为.txt的文件。
ls /original/file/path | grep .txt
这将成功列出带有txt扩展名的文件。但是,当我执行以下操作时:
mv `ls /original/file/path | grep .txt` /the/new/path
我看到一条错误消息:
mv: cannot stat 'test.txt': No such file or directory
我是否有任何原因遇到此错误?
这是因为ls进入目录会从文件中删除路径,即从文件名中删除了原始路径。因此,mv命令实际上是在当前目录中查找test.txt,因此出现错误。
您可以使用通配符,
mv `ls /original/file/path/*.txt` /the/new/path
简单地使用mv和通配符* .txt来匹配所有文本文件,如[]会更容易。
mv /original/file/*.txt /the/new/path
但是如果您确实必须使用grep,则可以使用xargs将其通过管道传输到mv,例如
ls /original/file/path | grep .txt | xargs -I% mv % help/
使用xargs的I标志表示,您将使用以下字符指定管道文件的位置,而我使用%字符。但是,仅当由于某种原因需要使用grep或ls,但经常会出现错误时,才应使用此选项。
为此,我将使用find
: