用于删除所有子目录中的文件的Bash脚本。

时间:2016-12-05 21:29:09

标签: linux bash directory

我有一个目录,其中包含超过450 GB的子目录。这些子目录中的每个子目录中都有一个指令文件。我有一个脚本,将指令文件复制到我当前所在的目录中,并通过以下方式将其放在每个子目录中:

#!/bin/bash
for d in */; do cp "INSTALLATION INSTRUCTIONS.rtf" "$d"; done 

我需要删除子目录中的所有这些文件,并用新指令替换它们。我可以简单地编写另一个执行此操作的脚本:

#!/bin/bash
for d in */; do rm "INSTALLATION INSTRUCTIONS.rtf" "$d"; done

我非常犹豫,想要起诉,因为这些文件非常重要,我不想意外删除任何内容,并且备份450+ GB非常费力。

2 个答案:

答案 0 :(得分:1)

find . -mindepth 2 -name "INSTALLATION INSTRUCTIONS.rtf" -exec rm -f '{}' +

答案 1 :(得分:1)

因为这是非常重要的"数据,我会首先列出所有与你要删除/覆盖的文件名相匹配的文件,而不对其采取任何行动(列出除外):

find /folder/ -type f -name "INSTALLATION INSTRUCTIONS.rtf" -print > /tmp/holder

这会在/ tmp / holder上创建一个匹配列表。然后,您可以在采取任何操作(视觉或编程)之前分析此列表,以确保列表中不包含您不想删除的任何内容(处理大量数据时,可能会发生奇怪的事情,因此积极主动地保护数据。)

如果您对列表显示的内容感到满意,则可以删除旧指令,或者如果可能,使用新文件覆盖它们。以下是使用新文件覆盖旧文件的示例:

while read -r line; do cp --no-preserve=all /folder/newfile "$line"; done < /tmp/holder

cp --no-preserve=all命令(在GNU bash上可用)将确保新文件具有足够的权限&#34;到他们所在的文件夹。如果您不希望这种情况发生,您可以将其更改为简单的cp