0

我想删除所有名称包含在另一个文件中的具有特定扩展名 (.xsl) 的文件。也就是说,如果我有一个像

a.xsl
b.xsl
c.xsl

和像这样的目录结构

./a.xsl
./d.xsl
./folder1/b.xsl
./folder1/folder2/c.xsl
./folder1/folder2/e.xsl

我希望能够删除d.xsland e.xsl,但不能删除a.xsl,b.xslc.xsl。目标外壳是 BASH。

4

3 回答 3

1

像这样的东西(未测试):

for fn in $(find -type f -name '*.xsl')
do
  echo ${fn##*/} | grep -vf file1 >/dev/null && rm $fn
done

其中 file1 是包含文件条目列表的文件。

${fn##*/}这将删除所有内容,直到最后一个斜杠单独给出文件名。这是grep针对文件的 ped,如果未重新发送,则删除。

于 2012-12-20T02:51:17.417 回答
0

此命令将执行此操作:

find -type f -name '*.xsl' -exec bash -c \
    'BN=`basename {}`; [[ -z `grep $BN used_xsl` ]] && svn rm {}' \;

但我想知道是否有更好的方法来做到这一点?这似乎是一种相当低效/迂回的方式来做我想做的事......

于 2012-12-20T02:17:48.070 回答
0

如果您的路径名中没有空格,那么您可以使用fgreporgrep -F巧妙地完成任务:

find . -name '*.xsl' -print | grep -F -v -f excluded.files | xargs rm -f

如果您可能必须处理任意路径名(换行符、空格等),那么您必须更加努力。

于 2012-12-20T03:43:55.763 回答