有没有一种好方法可以将文件中具有特定字符(不是文件名)的 .txt 文件移动到另一个目录?

Posted

技术标签:

【中文标题】有没有一种好方法可以将文件中具有特定字符(不是文件名)的 .txt 文件移动到另一个目录?【英文标题】:Is there a nice way to move .txt files with a specific character in the file (not filename) to another directory? 【发布时间】:2021-04-30 17:36:54 【问题描述】:

在 Mac 上使用 bash,我正在尝试检查 .txt 文件的文件夹,并且任何包含项目符号 (•) anywhere 的文件,将这些 .txt 文件移动到新的文件夹/子目录。有什么建议吗?

【问题讨论】:

mv *•*.txt newdir 应该可以工作 @jordanm 在文件名中查找,而不是文件内容。 【参考方案1】:

grep 可用于检查文件中是否存在字符:

#!/bin/bash
for filename in ./a/*.txt; do
    if grep -q • "$filename"; then
        mv "$filename" ./b/
    fi
done

【讨论】:

$filename 应该被引用,否则这会破坏带有空格或 shell 元字符的文件名。【参考方案2】:

如果 .txt 文件名中没有空格(感谢@jordanm,指出 out),您可以在一行中完成 - 您可以使用 grep 告诉您文件名 (-l) 包含一个模式 (-e) 并将它们移动到您的 new_directory:

mv $(grep -l old_directory/*.txt -e •) new_directory/

【讨论】:

如果任何文件名包含空格,这将不起作用。 太棒了!对于带空格的文件名:mv "$(grep -l old_directory/*.txt -e •)" new_directory/ @Andrey Moiseev,在命令的 $( ... ) 部分加上双引号对我不起作用......但我无法理解错误的原因。跨度> mv "$(grep -l old_directory/*.txt -e •)" new_directory/ 中的引号将按设计工作,当仅找到 1 个文件并且该文件的名称中有空格时。当grep 返回 2 个文件时,路径/文件名将连接起来,带引号的命令将尝试移动 1 个名称类似于 "old_directory/firstfile.txt old_directory/secondfile.txt" 的文件。它将寻找一个包含空格的子目录:firstfile.txt old_directory。我认为不会在该目录中找到secondfile.txt @WalterA,是的,现在我看到这是我在测试时观察到的行为。谢谢

以上是关于有没有一种好方法可以将文件中具有特定字符(不是文件名)的 .txt 文件移动到另一个目录?的主要内容,如果未能解决你的问题,请参考以下文章

在公共头文件中包含条件是不是被认为是一种好习惯?

有没有一种好方法可以将 pychecker/pylint 应用于 Tornado 模板中的 python 代码?

有没有一种好方法可以最大限度地减少 Google Maps Roads API 的负载?

学习KMP算法时想到的另一种好方法

学习KMP算法时想到的另一种好方法

XCode 中是不是有一种好方法可以跨项目重用类并轻松与其他开发人员共享?