Ubuntu Türkiye

Yazılım => Genel => Konuyu başlatan: hatas - 10 Temmuz 2013 - 22:36:54

Başlık: [Çözüldü] Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: hatas - 10 Temmuz 2013 - 22:36:54
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 (http://linuxtidbits.wordpress.com/2011/09/27/removing-rm/) bir kaynak buldum ancak tam emin olamadım. Bunu nasıl yapabilirim?
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: guopx - 10 Temmuz 2013 - 22:44:16
http://forum.ubuntu-tr.net/index.php?topic=36083.0 Böyle bir sorum olmuştu inceleyebilirsiniz isteseniz.
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: hatas - 10 Temmuz 2013 - 23:28:03
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?
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: guopx - 10 Temmuz 2013 - 23:50:15
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
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: hatas - 11 Temmuz 2013 - 00:34:11
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:~$

Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: if - 11 Temmuz 2013 - 01:06:41
@hatas, http://www.linuxjournal.com/article/6060
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: heartsmagic - 22 Temmuz 2013 - 04:46:10
@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.
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: kalkan1973 - 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...
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: hatas - 23 Temmuz 2013 - 18:01:17
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.
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: guopx - 23 Temmuz 2013 - 18:34:52
@ 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.
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: hatas - 23 Temmuz 2013 - 19:22:35
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.
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: guopx - 23 Temmuz 2013 - 19:26:00
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
Başlık: Ynt: Bir dizin altında belli türdeki tüm dosyalar nasıl silinir?
Gönderen: hatas - 23 Temmuz 2013 - 19:44:53
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.