Answers:
用途xargs
:
xargs rm < file # or
xargs -a file rm
但是,如果文件名/路径包含应转义的字符,则将无法使用。
如果文件名没有换行符,则可以执行以下操作:
tr '\n' '\0' < file | xargs -0 rm # or
xargs -a file -I{} rm {}
或者,您可以创建以下脚本:
#!/bin/bash
if [ -z "$1" ]; then
echo -e "Usage: $(basename $0) FILE\n"
exit 1
fi
if [ ! -e "$1" ]; then
echo -e "$1: File doesn't exist.\n"
exit 1
fi
while read -r line; do
[ -n "$line" ] && rm -- "$line"
done < "$1"
将其另存为/usr/local/bin/delete-from
,授予其执行权限:
sudo chmod +x /usr/local/bin/delete-from
然后运行:
delete-from /path/to/file/with/list/of/files
cat file
在(ba)sh或csh中使用“ rm-”。
cat
,@ shooper 是无用的,请利用stdin
!看看他的最新答案
通过python。
import sys
import os
fil = sys.argv[1]
with open(fil) as f:
for line in f:
os.remove(line.rstrip('\n'))
将上面的脚本保存在一个名为like的文件中script.py
,然后通过在终端上触发以下命令来执行该脚本。
python3 script.py file
file
是一个输入文件,实际要删除的文件的路径存储在该文件中。
另一种方法是:
您可以通过使它成为外壳脚本来“准备”文件:
$ sed -E "s/^(.*)$/rm '\1'/" input_file
rm 'file1'
rm 'file2'
rm 'file with some spaces.ext'
如果文件名可能带有单引号('
),则可以使用此稍微扩展的版本先对其进行转义:
$ sed -E "s/'/'\\\''; s/^(.*)$/rm '\1'/" input_file
rm 'file1'
rm 'file2'
rm 'file with some spaces.ext'
rm 'a file with "quotes"'
rm 'a file with '\''quotes'\'''
您可以通过管道将其运行到sh
:
$ sed -E "s/'/'\\\''; s/^(.*)$/rm '\1'/" input_file | sh
据我了解,您有一个文本文件,其中包含具有完整路径的文件。有两种可能性:
您的列表中的文件名用换行符分隔,即每行都有文件的完整路径。在这种情况下:这是一个简单的解决方法:
for i in $(cat listOfFiles.txt); do
rm -f $i
done
如果列表中包含一行或多行文件名,且文件名之间用空格或制表符分隔,则进行以下钻取:
sed -i 's/\s\+/\n/g' listOfFiles.txt
这会将所有空格转换为换行符
for i in $(cat listOfFiles.txt); do
rm -f $i
done
是的,有很多方法可以完成它,但这是一个非常简单的方法。
cat
不是必须的,您可以使用stdin
重定向:< file xargs rm