使用 grep 移动具有特定扩展名的文件
Moving files with a certain extension using grep
我正在尝试移动扩展名为 .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
:
find /original/file/path/ -maxdepth 1 -name '*.txt' -exec mv {} /the/new/path/ \;
解释参数:
- 在
/original/file/path/
中查找文件
- 仅在当前文件夹中(
find
如果需要,可以深入目录树)
- 姓名为
*.txt
- 并执行命令
mv
用找到的每个文件替换 {}
。
我正在尝试移动扩展名为 .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
:
find /original/file/path/ -maxdepth 1 -name '*.txt' -exec mv {} /the/new/path/ \;
解释参数:
- 在
/original/file/path/
中查找文件
- 仅在当前文件夹中(
find
如果需要,可以深入目录树) - 姓名为
*.txt
- 并执行命令
mv
用找到的每个文件替换{}
。