删除与另一个名称列表部分匹配的文件
delete files with partial match to another list of names
我在 file1 中有一个名称列表,它是我要删除的文件的真实文件名的子字符串。我想删除与 file1 中的名称部分匹配的文件。知道如何指定要删除的文件吗?
文件 1:
file123
file313
file355
真实文件:
file123.sam.out
file313.sam.out
file355.sam.out
file342455.sam.out
file34455.sam.out
要保留的文件:
file342455.sam.out
file34455.sam.out
#!/bin/bash
PATTERN_FILE=file1
FILE_TO_REMOVE_FOLDER=files
cat $PATTERN_FILE | while read x
do
if [ "" != "$x" ]
then
echo "rm $FILE_TO_REMOVE_FOLDER/$x*"
rm $FILE_TO_REMOVE_FOLDER/$x*
fi
done
假设您没有任何包含换行文字的文件名...
printf '%s\n' * | grep -Fvf file1 | xargs -d $'\n' rm -f --
让我们来看看这个 piece-by-piece:
printf '%s\n' *
生成当前目录中的文件列表。
grep -Fvf file1
从该列表中删除任何包含来自 file1
的行作为子字符串的字符串
xargs -d $'\n' rm -f --
在换行符上拆分它的标准输入,并将它留下的任何内容作为参数传递给 rm -f --
如果您有 GNU 工具(和 shell,如 bash,支持进程替换),您可以使用 NUL 分隔符,从而处理所有可能的文件名:
printf '%s[=11=]' * |
grep -zFvf <(tr '\n' '[=11=]' <file1) |
xargs -0 rm -f --
printf '%s[=17=]' *
在每个文件名后放置一个 NUL,而不是换行符。
tr '\n' '[=18=]' <file1
发出 file1 的内容,换行符替换为 NULs
grep -zFvf
将其输入读取为 NUL-delimited,并写入 NUL-delimited 输出,但其他行为如上。
xargs -0 rm -f --
读取内容,在 NUL 上拆分,并将输入作为参数传递给 rm -f --
。
我在 file1 中有一个名称列表,它是我要删除的文件的真实文件名的子字符串。我想删除与 file1 中的名称部分匹配的文件。知道如何指定要删除的文件吗?
文件 1:
file123
file313
file355
真实文件:
file123.sam.out
file313.sam.out
file355.sam.out
file342455.sam.out
file34455.sam.out
要保留的文件:
file342455.sam.out
file34455.sam.out
#!/bin/bash
PATTERN_FILE=file1
FILE_TO_REMOVE_FOLDER=files
cat $PATTERN_FILE | while read x
do
if [ "" != "$x" ]
then
echo "rm $FILE_TO_REMOVE_FOLDER/$x*"
rm $FILE_TO_REMOVE_FOLDER/$x*
fi
done
假设您没有任何包含换行文字的文件名...
printf '%s\n' * | grep -Fvf file1 | xargs -d $'\n' rm -f --
让我们来看看这个 piece-by-piece:
printf '%s\n' *
生成当前目录中的文件列表。grep -Fvf file1
从该列表中删除任何包含来自file1
的行作为子字符串的字符串
xargs -d $'\n' rm -f --
在换行符上拆分它的标准输入,并将它留下的任何内容作为参数传递给rm -f --
如果您有 GNU 工具(和 shell,如 bash,支持进程替换),您可以使用 NUL 分隔符,从而处理所有可能的文件名:
printf '%s[=11=]' * |
grep -zFvf <(tr '\n' '[=11=]' <file1) |
xargs -0 rm -f --
printf '%s[=17=]' *
在每个文件名后放置一个 NUL,而不是换行符。tr '\n' '[=18=]' <file1
发出 file1 的内容,换行符替换为 NULsgrep -zFvf
将其输入读取为 NUL-delimited,并写入 NUL-delimited 输出,但其他行为如上。xargs -0 rm -f --
读取内容,在 NUL 上拆分,并将输入作为参数传递给rm -f --
。