0

名前が別のファイルに含まれていない特定の拡張子 (.xsl) を持つすべてのファイルを削除したい。つまり、次のようなファイルがある場合

a.xsl
b.xsl
c.xsl

そして、次のようなディレクトリ構造

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

d.xslとを削除できるようにしたいが、、、またはは削除したくe.xslない。ターゲット シェルは BASH です。a.xslb.xslc.xsl

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ファイルに対して ping され、再送信されない場合は削除されます。

于 2012-12-20T02:51:17.417 に答える
0

パス名にスペースが含まれていない場合は、fgreporgrep -Fを使用してタスクを適切に実行できます。

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

任意のパス名 (改行、スペースなど) を処理する必要がある場合は、より多くの作業が必要になります。

于 2012-12-20T03:43:55.763 に答える
0

このコマンドはそれを行います:

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

しかし、それを行うより良い方法があるかどうか疑問に思っていますか?それは、私がやりたいことを行うにはかなり非効率的/迂遠な方法のようです...

于 2012-12-20T02:17:48.070 に答える