[Çözüldü] Dizindeki dosyalara aynı isimde dizin açıp bu dosyaları açılan dizinlere taşıma.

Başlatan krwlng, 13 Nisan 2015 - 14:33:56

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

krwlng

Merhaba, uzun zamandır forumdan uzak kaldım iş güç derken fırsat olmadı, şimdi girince farkettim çok özlemişim :)
Benim bir sorunum var ve çözümünün bash programlama ile çözülebileceği aklıma geldi bana yardımcı olabilirseniz çok sevinirim.

Öncelikle elimde bir dizin var ve bu dizinde binlerce "jpg" dosyası mevcut, benim istediğim bu dizindeki jpg dosyalarının her biri için aynı isimde yeni dizin açıp bu dosyayı o dizin içerisine taşıyacak bir betik, bu jpg olabilir bmp olabilir png olabilir, yani uzantı değişebiliyor. Bu konuda bana yardımcı olabilecek arkadaşlara şimdiden çok teşekkür ederim.
http://twitter.com/yusuFBrn

Ali İsmail Korkmaz, FENERBAHÇE Yıkılmaz!

cagriemer

mkdir deneme
~ @$ cd deneme
~/deneme @$ touch test1.sh
~/deneme @$ touch test1.txt
~/deneme @$ touch test2.png
~/deneme @$ touch test3.sql
~/deneme @$ touch test4.png
~/deneme @$ touch test4.jpg
~/deneme @$ mkdir tasi
~/deneme @$ tree .
.
├── tasi
├── test1.sh
├── test1.txt
├── test2.png
├── test3.sql
├── test4.jpg
└── test4.png

1 directory, 6 files

for i in *.{txt,sh,sql,png,jpg}; do dosya=$(basename "$i"); dizin=~/deneme/tasi/${dosya%.*}; echo "mkdir -p $dizin"; echo "mv $i --> $dizin"; done

mkdir -p /Users/cagri/deneme/tasi/test1
mv test1.txt --> /Users/cagri/deneme/tasi/test1
mkdir -p /Users/cagri/deneme/tasi/test1
mv test1.sh --> /Users/cagri/deneme/tasi/test1
mkdir -p /Users/cagri/deneme/tasi/test3
mv test3.sql --> /Users/cagri/deneme/tasi/test3
mkdir -p /Users/cagri/deneme/tasi/test2
mv test2.png --> /Users/cagri/deneme/tasi/test2
mkdir -p /Users/cagri/deneme/tasi/test4
mv test4.png --> /Users/cagri/deneme/tasi/test4
mkdir -p /Users/cagri/deneme/tasi/test4
mv test4.jpg --> /Users/cagri/deneme/tasi/test4


echo yerine komutun kendisini calistirirsaniz istediginiz islemi gerceklestirmesi lazim. Calistirmadan once mutlaka yedek alin.

krwlng

@cagriemer, Öncelikle ilgilendiğin için teşekkürler çalıştırınca şöyle bir hata alıyorum. test isimli bir dizin ve içerisinde deneme için attığım birkaç dosya var.

system@system:~/test$ for i in *.{bmp,png,jpg}; do dosya=$(basename "$i"); dizin=~/test/${dosya%.*}; "mkdir -p $dizin"; "mv $i --> $dizin"; done               
-bash: mkdir -p /home/system/test/*: No such file or directory
-bash: mv *.bmp --> /home/system/test/*: No such file or directory
-bash: mkdir -p /home/system/test/*: No such file or directory
-bash: mv *.png --> /home/system/test/*: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200112-0_1_b: No such file or directory
-bash: mv 2y1025200112-0_1_b.jpg --> /home/system/test/2y1025200112-0_1_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200112-0_2_b: No such file or directory
-bash: mv 2y1025200112-0_2_b.jpg --> /home/system/test/2y1025200112-0_2_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200112-0_3_b: No such file or directory
-bash: mv 2y1025200112-0_3_b.jpg --> /home/system/test/2y1025200112-0_3_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200112-0_4_b: No such file or directory
-bash: mv 2y1025200112-0_4_b.jpg --> /home/system/test/2y1025200112-0_4_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200113-0_1_b: No such file or directory
-bash: mv 2y1025200113-0_1_b.jpg --> /home/system/test/2y1025200113-0_1_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200113-0_2_b: No such file or directory
-bash: mv 2y1025200113-0_2_b.jpg --> /home/system/test/2y1025200113-0_2_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200113-0_3_b: No such file or directory
-bash: mv 2y1025200113-0_3_b.jpg --> /home/system/test/2y1025200113-0_3_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200113-0_4_b: No such file or directory
-bash: mv 2y1025200113-0_4_b.jpg --> /home/system/test/2y1025200113-0_4_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200114-0_1_b: No such file or directory
-bash: mv 2y1025200114-0_1_b.jpg --> /home/system/test/2y1025200114-0_1_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200114-0_2_b: No such file or directory
-bash: mv 2y1025200114-0_2_b.jpg --> /home/system/test/2y1025200114-0_2_b: No such file or directory
-bash: mkdir -p /home/system/test/2y1025200114-0_3_b: No such file or directory
-bash: mv 2y1025200114-0_3_b.jpg --> /home/system/test/2y1025200114-0_3_b: No such file or directory
http://twitter.com/yusuFBrn

Ali İsmail Korkmaz, FENERBAHÇE Yıkılmaz!

if

@krwlng; mkdir ve mv komutlarını kapsayan çift tırnaklar aslında echo komutuna aittir, onları da kaldırmalısınız:
for i in *.{bmp,png,jpg}; do dosya=$(basename "$i"); dizin=~/test/${dosya%.*}; mkdir -p $dizin; mv $i --> $dizin; done

krwlng

@if bildiğim şeyi göz göre göre yapmamışım teşekkürler hatırlatma için :) Şuan komut çalıştı dosyaların isimlerinde dizinler oluştu fakat dosyalar aynı isimli dizinlere taşınmadı, oldukları yerde kaldı, çıktı aşağıdaki şekilde.

system@system:~/test$ for i in *.{bmp,png,jpg}; do dosya=$(basename "$i"); dizin=~/test/${dosya%.*}; mkdir -p $dizin; mv $i --> $dizin; done
mkdir: cannot create directory `/home/system/test/2y1025200112-0_1_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200112-0_2_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200112-0_3_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200112-0_4_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_1_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_2_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_3_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_4_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200114-0_1_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200114-0_2_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200114-0_3_b.jpg': File exists
-bash: $dizin: ambiguous redirect
mkdir: cannot create directory `/home/system/test/2y1025200112-0_1_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200112-0_2_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200112-0_3_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200112-0_4_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_1_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_2_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_3_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200113-0_4_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200114-0_1_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200114-0_2_b.jpg': File exists
mkdir: cannot create directory `/home/system/test/2y1025200114-0_3_b.jpg': File exists
-bash: $dizin: ambiguous redirect
-bash: /home/system/test/2y1025200112-0_1_b: Is a directory
-bash: /home/system/test/2y1025200112-0_2_b: Is a directory
-bash: /home/system/test/2y1025200112-0_3_b: Is a directory
-bash: /home/system/test/2y1025200112-0_4_b: Is a directory
-bash: /home/system/test/2y1025200113-0_1_b: Is a directory
-bash: /home/system/test/2y1025200113-0_2_b: Is a directory
-bash: /home/system/test/2y1025200113-0_3_b: Is a directory
-bash: /home/system/test/2y1025200113-0_4_b: Is a directory
-bash: /home/system/test/2y1025200114-0_1_b: Is a directory
-bash: /home/system/test/2y1025200114-0_2_b: Is a directory
-bash: /home/system/test/2y1025200114-0_3_b: Is a directory
http://twitter.com/yusuFBrn

Ali İsmail Korkmaz, FENERBAHÇE Yıkılmaz!

cagriemer

Alıntı Yapfor i in *.{bmp,png,jpg}; do dosya=$(basename "$i"); dizin=~/test/${dosya%.*}; mkdir -p $dizin; mv $i --> $dizin; done

mv komutundaki --> isaretini kaldirmalisiniz. Eger test dizini icerisinde calisiyorsaniz ekstra bir dizin daha yaratin burada. Ornekte "tasi" diye bir dizin yaratmistim ben. Bu degisiklikleri yapip su komutu calistirin.

for i in *.{bmp,png,jpg}; do dosya=$(basename "$i"); dizin=~/test/tasi/${dosya%.*}; mkdir -p $dizin; mv $i $dizin; done

krwlng

@cagriemer, tekrar ellerine sağlık betik tam istediğim gibi çalıştı, beni çok büyük bir yükten kurtardı, tekrar çok teşekkürler.
Not olarak eğer dizinde, betiğin başında belirlenen uzantılardan biri veya birkaçı yoksa o uzantılarla ilgili dosya bulunamadı gibi bir hata veriyor fakat bulunan dosya uzantıları ile ilgili işlem yapılmasını engellemiyor bu durum, böyle olunca boş bir "*" dizini oluşuyor fakat bunun da çalışmaya bir etkisi olmuyor, betikte belirtilen uzantıların hepsi dizinde mevcutsa hiçbir hata vermeden işlem tamamlanıyor.
http://twitter.com/yusuFBrn

Ali İsmail Korkmaz, FENERBAHÇE Yıkılmaz!