使用grep移动具有特定扩展名的文件

问题描述 投票:1回答:3

我正在尝试移动扩展名为.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

我是否有任何原因遇到此错误?

linux command line
3个回答
0
投票

这是因为ls进入目录会从文件中删除路径,即从文件名中删除了原始路径。因此,mv命令实际上是在当前目录中查找test.txt,因此出现错误。

您可以使用通配符,

mv `ls /original/file/path/*.txt` /the/new/path

0
投票

简单地使用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,但经常会出现错误时,才应使用此选项。


0
投票

为此,我将使用find

© www.soinside.com 2019 - 2024. All rights reserved.