从文件列表中查找文件并执行删除

从文件列表中查找文件并执行删除

我想查找文本文件中的许多文件名。我怎样才能将此文本文件传递给命令find(或另一个命令?)以查找其中的每一行(每一行都是一个文件名)?我的目标是查找所有文件名并删除它们。

find /path/to/my/files -name "list-from-file.txt" -delete 

答案1

如果有一个文件(我们称之为filenames.txt)包含要删除的文件名列表,例如

a.txt
subfolder1/b.sh
subfolder2/subfolder3/c.jpg
/home/user/a.txt

您只需要cd到文件包含的相对路径有效的文件夹并发出命令:

< path/to/filenames.txt xargs echo rm

您会注意到这只会列出rm命令。这是一项安全检查。删除echo以触发文件删除,风险自负!

请注意,路径将直接传递而rm无需采取任何额外措施,因此我的示例中的最后一行将作为绝对路径。

答案2

如果 myTextFile 中只保存了文件名,则使用findwith :xargs

xargs -d '\n' -a /path/to/myTextFile -I FILENAME find /src -type f -name FILENAME #-delete

如果你知道所有文件都在一个特定的目录中,或者它们都有自己的小路包括,那么命令将是:

xargs -d '\n' -a /path/to/myTextFile echo rm -f --

或者使用简单的bash脚本。

while IFS='\n' read -r FILE
do
    find /src -type f -name "$FILE" #-delete
done < /path/to/myTextFile

答案3

使用命令将 myTextFile 推送到 while 循环read

while IFS= read -r f; do
   test -f "$f" && rm -f "$f"
done < myTextFile

答案4

for i in `less list-from-file.txt`; do rm $i;done

在哪里less打开文件list-from-file.txt

因此,文件的每一行list-from-file.txt都是$i

最后,rm命令将删除该文件。

相关内容