Unixで1つのファイルを除くすべてを削除する方法は?[複製]


13

重複の可能性:
ディレクトリ内の一部のファイルを除くすべてのファイルを削除するにはどうすればよいですか?

Unixで1つ(またはいくつか)のファイルを除くすべてを削除するにはどうすればよいですか?

何かのようなもの

 rm -rf -ignore myfile.txt *

回答:


20
ls * | grep -v dont_delete_this_file | xargs rm -rf 

例:

mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5

「test2」以外のすべてのファイルを削除するには:

ls * | grep -v test2 | xargs rm -rf

次に、「ls」の出力は次のとおりです。

test2

編集:

コメントありがとうございます。ディレクトリにスペースのあるファイルが含まれている場合:

mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"

あなたは(bashで)使用できます:

rm !("test 1"|"test 4")

「ls」出力:

test 1
test 4

findを使用して非常によく似ていましたが、あなたのものが動作し、より速くなりました。+1
ロリーアルソップ

2
名前にスペースが含まれるファイルがある場合、これは失敗します。
マット

スペースを使用してファイル名を処理するために使用することができますls -1 | grep -v do_not_delete | xargs -I files rm "files"
-sebhofer

8

bashシェル(最も一般的なケース)を使用していると仮定すると、否定グロブ(パス名展開)シンボルを使用できます。

rm -rf !(myfile.txt)

これは拡張グロビングを使用するため、最初にこれを有効にする必要があります。

shopt -s extglob




0

再帰のrm場合は、find保持したいファイルを使用して再帰を実行し、除外する必要があります(またはgrep、しかし、それにより空白の問題が発生する可能性があります)。シェルグロブの場合、最新のシェルにはファイルを除外するために使用できるグロブパターンがあります。これは、利用可能な場合はシェルレベルのグロブ再帰と組み合わせることができます(たとえば、zsh持っているrm **/*~foo/bar—これは、大きなディレクトリツリーの引数の長さの制限に達する可能性があることに注意してください)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.