我想查找文本文件中的许多文件名。我怎样才能将此文本文件传递给命令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 中只保存了文件名,则使用find
with :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
命令将删除该文件。