Unix'te bir dosya hariç tümü nasıl silinir? [çiftleme]


Yanıtlar:


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

Misal :

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

'Test2' dışındaki tüm dosyaları kaldırmak için:

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

Sonra 'ls' çıktı:

test2

DÜZENLE:

Yorum için teşekkürler. Dizinde boşluk bulunan bazı dosyalar varsa:

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

Şunu kullanabilirsiniz (bash ile):

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

'ls' çıkışı:

test 1
test 4

Bulmayı kullanarak çok benzer bir şey yapacaktım, ama seninki çalışıyor ve sen daha hızlıydın. +1
Rory Alsop

2
adlarında boşluk bulunan dosyalarınız varsa bu başarısız olur.
Mat

ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Boşluklu

8

Bash kabuğunu (en yaygın durum) kullandığınızı varsayarsak, olumsuzlama globbing (yol adı genişletme) sembolünü kullanabilirsiniz:

rm -rf !(myfile.txt)

Bu, genişletilmiş globbing kullanır, bu yüzden önce bunu etkinleştirmeniz gerekir:

shopt -s extglob

1
 cp myfile.txt somewhere_else;
 rm -rf *
 cp somewhere_else/myfile.txt .

1
ln myfile.txt .myfile.txt && rm -rf * && mv .myfile.txt myfile.txt


0

Özyinelemeli bir özyineleme rmiçin özyinelemeyi findsaklamak istediğiniz dosya (lar) ile yapmanız ve hariç tutmanız gerekir (veya grepbu sizi boşluk sorununa sokabilir). Bir kabuk glob için, modern kabuklar dosyaları hariç tutmak için kullanılabilecek glob desenlerine sahiptir; bu, kullanılabilir olduğunda kabuk düzeyi glob özyinelemesiyle birleştirilebilir (örneğin zsh, rm **/*~foo/barbunun büyük dizin ağaçları için bağımsız değişken uzunluk sınırlarına girebileceğini unutmayın).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.