[Çözüldü] Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?

Başlatan hatas, 10 Temmuz 2013 - 22:36:54

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

hatas

Arkadaşın bilgisayarına aceleyle Ubuntu kurarken yanlışlıkla tüm diski formatlamışım  :o Silinen dosyaları kurtarmak için PhotoRec(TestDisk) yazılımını kullandım. Bir günlük tarama neticesinde yanlış görmediysem 1 milyon adetin üzerinde (400 GB) dosya buldu ve bunları belirlediğim dizin altında 2800 adet alt klasöre yerleştirdi.

Şimdi bu klasörler içinde başta .txt uzantılı dosya olmak üzere gereksiz bir yığın dosya var. .txt uzantılı dosyaları kısayoldan silmek istiyorum.

Biraz araştırdım şöyle bir kaynak buldum ancak tam emin olamadım. Bunu nasıl yapabilirim?

guopx

Sevdiklerine sevdiğini söyle çok geç olmadan.

hatas

Teşekkür ederim. Verdiğiniz başlık kilitli olduğu için buradan devam ediyorum.

cd dizinin_yeri komutu yardımıyla istediğim dizine girdikten sonra alttaki komutu kullanmak işe yardı, .txt uzantılı dosyalar silindi.
find . -type f -name "*.txt" -exec rm -f {} \;

Acaba aynı anda bir kaç dosya tipini (txt, xml, dll, exe gibi) tek bir komutla silmek mümkün müdür?

Bir de özellikle şuna ihtiyacım var; bahsettiğim 2800 alt klasördeki tüm jpeg ve png dosyalarını tek bir klasörde birleştirmek mümkün olabilir mi?

guopx

Toplu silmek için rm -rf /2800/dizinin/bulunduğu/dizin/*/{*.exe,*.dll,*.xml,*.txt}
Taşımak için
mv  /2800/dizinin/bulunduğu/dizin/*/{*.jpeg,*.png}  /taşımak/istediğiniz/dizin
Sevdiklerine sevdiğini söyle çok geç olmadan.

hatas

mv komutunu denediğimde "Argüman listesi çok uzun" şeklinde bir yanıt alıyorum.

nezot@nezot-W25xHPx:~$ mv /home/nezot/Resimler/*/{*.jpg,*.jpeg} /home/nezot/Masaüstü/rsm
bash: /bin/mv: Argüman listesi çok uzun
nezot@nezot-W25xHPx:~$



heartsmagic

@if'in verdiği kaynaktaki find örneği bu mv için argüman listesi sınırlaması için genellikle kullanılan bir çözüm.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

kalkan1973

rm /home/kalkan1/recop.dir/xxx/*.exe *.mp3 *.txt
örneğinde olduğu gibi yapıyorum. Kesin sonuç aldım defalarca...
Evde İşte her yerde Linux

hatas

Alıntı yapılan: Mustafa Kalkan - 22 Temmuz 2013 - 05:13:10
rm /home/kalkan1/recop.dir/xxx/*.exe *.mp3 *.txt
örneğinde olduğu gibi yapıyorum. Kesin sonuç aldım defalarca...

Sanırım bu komut, tek bir dizin altındaki dosyaları siliyor, yani bir dizin altında yer alan 2800 adet alt klasördeki dosyaları silemiyor galiba. Aslında şuanda silme konusunu çözmek için değil, 2800 adet klasördeki dosyaları tek bir klasör içinde toplamak için uğraşıyorum. @if in verdiği bağlantıyı inceledim fakat komut satırı kullanımına yabancı olduğum için bunu çözmem bira zor görünüyor.

guopx

@ hatas
2800 klasör içindeki belli dosya tiplerini tek bir klasörde birlestirmek için şunu kullanın:
find /2800/dizinin/bulunduğu/dizin  -name "*.mp3" -o -name "*.txt" -o -name "*.png" -exec mv {}  /taşımak/istediğim/dizin \;
Bu kurtarılmış dosyalardan mp3 png ve txt dosyalarını belirttiğiniz dizin içine taşıyacaktır.
Sevdiklerine sevdiğini söyle çok geç olmadan.

hatas

Herkese çok teşekkür ederim. @guopx bu komut işime yaradı, çok sağol.

Artık benim için bir sorun teşkil etmiyor ancak konuyu daha sonradan okuyabilecek kullanıcılar için bir kaç not düşeyim.

Komutta 3 dosya uzantısı yazdığımda sadece en sağa yazdığım dosya türüne dair arama yapıp taşıma işlemini yapıyordu bu yüzden komutu şu şekilde değiştirerek, taşımak istediğim her bir dosya türü için ayrı ayrı kullandım:

sudo find /home/hatas/İndirilenler -name "*.png" -exec mv {} /home/hatas/Masaüstü/Adsız_Klasör \;

Sonuçta bu işlem sadece .png uzantılı dosyaları bulup taşıdı. Bu yüzden formülü birkaç kez daha kullanarak diğer dosya türlerini de taşıdım

Bir de formülün başına sudo yazmam gerekti, çünkü kaynak dosyaların erişim hakları kısıtlı olduğu için erişim hatası veriyordu.

Ayrıca Hedef klasörün adında boşluk karakteri bulunursa klasör bulunamadı gibi bir hata veriyor.

guopx

DÜZELTME: Demin farkettim de -o ile birleştirmek bazen işe yaramıyor nedenini ben de anlamadım. O yüzden en son ve kesin çözümü veriyorum :)
#! /bin/bash
dosyatipleri="*.svg *.ini *.xml"
for tip in $dosyatipleri
do
find /2800/dizinin/bulunduğu/dizin  -name "$tip"  -exec mv {}  /taşımak/istediğim/dizin \;
done

Bunu gedit veya başka bir programla (artık hangisin kullanıyorsan) kaydet adı taşı.sh olsun. Kaydettiğin dosyaya sağ tıla özellikler de, erişim hakları sekmesinden "Dosyayı bir program gibi çalıştırmaya izin ver" kısmına tik koy. Sonra dosyanın bulunduğu dizinde uçbirim aç ./taşı.sh komutu ile çalıştır. Taşımak istediğin dosya tiplerini
dosyatipleri="*.svg *.ini *.xml *.istediğimdosyatipi" şeklinde bir boşluk bırakarak ekleyebilirisin.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 23 Temmuz 2013 - 19:33:37

Düzenleme2: Dosya adında boşluk varsa mesela "Adsız Dizin" ise /home/hatas/Masaüstü/Adsız\ Dizin şeklinde göstermelisiniz. Yani boşlukan önce bir ters slash koymak gerekli.
Sudo ile çalıştırmak gerekirse: sudo ./taşı.sh
Sevdiklerine sevdiğini söyle çok geç olmadan.

hatas

Benim bu ikinci yöntemi denememe gerek kalmadı, önceki yöntemle işlerimi halletim  :D

Tüm bu bilgiler, işi Photorec'e düşen kullanıcıların çok işine yarayacaktır. Çok sağolun.