遍历文件夹内的特定子文件夹并删除包含特定名称的文件 - AIX

Posted

技术标签:

【中文标题】遍历文件夹内的特定子文件夹并删除包含特定名称的文件 - AIX【英文标题】:loop through specific sub folders inside a folder and delete files contains specific name - AIX 【发布时间】:2020-05-03 21:23:20 【问题描述】:

我的文件夹结构如下: 有 100 个文件夹,每个文件夹有 3 个子文件夹(想象 A、B 和 C)。我的任务是从所有 100 个文件夹中删除仅在文件夹 C 中具有特定文本的文件。

我对 Unix 命令知之甚少,我的任务是在 AIX 服务器上执行 我试图用谷歌搜索并找到下面的脚本(它实际上并没有删除)。 当我尝试执行以下脚本时,出现以下错误 “test.sh[5]:接受:未找到。” 但实际上存在“已接受”文件夹。不确定为什么会发生错误。

for dir in $(ls)
do 
    for dir2 in $(ls)
        do
        cd accepted
        echo $(ls)
        done    
done 

谁能帮我更新脚本以执行“循环遍历文件夹内的子文件夹并删除仅包含特定子文件夹内的特定文本的文件”?

【问题讨论】:

specific text 是什么意思?文本文件中的文件名或行/单词?另外folder C only是什么意思?特定性是在文件夹 A、B 和 C 之间本地定义的,还是在 100 个文件夹中全局定义的?如果您能举例说明,我们将不胜感激。 rm */c/*accepted* 文件夹结构如下根文件夹:X里面的X子文件夹是:A、B、C每个文件夹A、B和C里面的子文件夹是:D、E、F我要删除的文件有仅来自所有文件夹 A、B 和 C 的子文件夹 F 内的文件名中的特定文本 【参考方案1】:

虽然可以使用树搜索来实现识别文件的逻辑,但在这种情况下不需要这样做。请考虑以下内容。

请注意,如果任何文件名包含特殊字符(空格、引号、换行符),该解决方案将不起作用。它适用于“普通”文件名(带有字符 a-zA-Z0-9_-. 等)..

file_list=$(grep -l SomeText */C/*)
rm $file_list

可以组合成一条线 - 小心使用

rm $(grep -l SomeText */C/*)

如果需要,您还可以使用rm -i 代替rm 来提示要删除的每个文件。

【讨论】:

【参考方案2】:

我以目录树为例:

X
├── A
│   ├── D
│   │   ├── bar.txt
│   │   └── foo.txt
│   ├── E
│   │   ├── bar.txt
│   │   └── foo.txt
│   └── F
│       ├── bar.txt
│       └── foo.txt
├── B
│   ├── D
│   │   ├── bar.txt
│   │   └── foo.txt
│   ├── E
│   │   ├── bar.txt
│   │   └── foo.txt
│   └── F
│       ├── bar.txt
│       └── foo.txt
└── C
    ├── D
    │   ├── bar.txt
    │   └── foo.txt
    ├── E
    │   ├── bar.txt
    │   └── foo.txt
    └── F
        ├── bar.txt
        └── foo.txt

假设您只想从目录F 中删除以foo 开头的文件。 那么请尝试以下方法:

find X/*/F -type f -name "foo*" -delete

现在目录树将如下所示:

X
├── A
│   ├── D
│   │   ├── bar.txt
│   │   └── foo.txt
│   ├── E
│   │   ├── bar.txt
│   │   └── foo.txt
│   └── F
│       └── bar.txt
├── B
│   ├── D
│   │   ├── bar.txt
│   │   └── foo.txt
│   ├── E
│   │   ├── bar.txt
│   │   └── foo.txt
│   └── F
│       └── bar.txt
└── C
    ├── D
    │   ├── bar.txt
    │   └── foo.txt
    ├── E
    │   ├── bar.txt
    │   └── foo.txt
    └── F
        └── bar.txt

我希望这符合您的要求。

【讨论】:

或:rm X/*/F/foo* @Sumathiputra 感谢您的反馈。我对修改很感兴趣。 谢谢。然后您可能已将其替换为 -exec rm 或类似的东西。明白了,虽然我不确定为什么-delete 不起作用。

以上是关于遍历文件夹内的特定子文件夹并删除包含特定名称的文件 - AIX的主要内容,如果未能解决你的问题,请参考以下文章

cmd中bat遍历文件夹下所有文件,并进行特定操作

将具有特定(相同)名称的子文件夹复制到目标

使用 osx 终端从外部硬盘驱动器中提取具有特定名称的子文件夹。

解析目录中的 html 文件并使用 BeautifulSoup 删除特定标签

有没有办法删除只包含一个特定文件的文件夹?

SQL遍历表并删除如果不是特定名称