循环访问文件夹中的特定子文件夹并删除包含特定名称 - AIX 的文件



我的文件夹结构如下: 有 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 

任何人都可以帮助我更新脚本以执行"循环访问文件夹内的子文件夹并删除仅包含特定子文件夹中特定文本的文件"?

让我以目录树为例:

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

假设您要从目录中删除以foo开头的文件F仅。
那么请尝试以下操作:

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

我希望这符合您的要求。

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

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

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

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

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

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

相关内容

最新更新