[Çözüldü] Boşluk silen/ekleyen Bash komutu

Başlatan monthy_python, 22 Mayıs 2013 - 05:32:05

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

monthy_python

bash konusunda pek iyi değilim.
boşlukları alt çizgi ile dolduran aşağıdaki kodu severek kullandım.
ama bir terslik oldu
bu kodu tersine döndürmem gerek.

alt çizgiyi boşluk yapan yani.
find . -name "* *" |
while read p
do
  f=${p##*/}
  d=${p%/*}
  sudo mv "$d/$f" "$d/${f// /_}"
done



bunu ters çevirmek istiyorum,
"recursive" döngüsel> olan/ ve olmayan şekliyle gösterebilirseniz
minnettar kalıcam :)

hitokiri

#!/bin/bash
# vim: ts=4:sw=4
find . -name "* *" |
while read p
do
  dosya=${p##*/}
  dizin=${p%/*}

  echo  " "$dizin/$dosya"  > "$dizin/${dosya//_/ }"   "
done

Olmuştur herhalde {} içinde "//" kısmı sed komutuna benzer işlevde.

monthy_python

#2
@hitokiri, alt çizgiyi boşluk yapmadı.

benim sorunum esasında, ~/documents/ altında yüzlerce dosya varmış gözümden kaçan(oyun save dosyaları) onların altı çizilince save'ler değişti :)

sizinki çizgiyi boşluk yapmadı. (hiç bir şey yapmadı)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 22 Mayıs 2013 - 08:41:16

sudo denedim (bir ihtimal diye) yok, değişmedi dosyalar.

heartsmagic

Aynı komutları mı kullanmamız gerekiyor?

sed, awk birçoğu ile yapılabilir esasında, ancak bu sefer rename'den gidelim :)

find . -type f -exec rename 's/_/ /g' '{}' \;

Bulunduğun dizinde alt dizinler de dahil tüm dosyaların alt çizgi içeren bölümlerini boşluğa çevirir. Dizinler vasrsa -type f kısmını kaldırırsın hata verir ama sorun olmaz.
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.

monthy_python

denedim, sonuç:
find: rename: No such file or directory

heartsmagic

type -f ile mi yoksa onsuz mu denedin? Bende iş görüyor komut, deneyerek aktarmıştım aslında buraya.
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.

monthy_python

aynen denedim heartsmagic.

-f ile yani.

hitokiri

bende @heartsmagic 'in verdiği komut sorunsuzca çalıştı , ancak sende benim gönderdiğimin çalışmamasının en olası nedeni ;
find 'ın "* *" bu şekilde arama yapıyor olması olabilir çünkü bu şekilde içinde boşluk olmayan dosyaları es geçicektir,haliyle bende yeni _dosya 1, yeni _dosya 2 şablondan çoğalttığım için şimdi fark ettim :)
ls
find . -name "*_*" |
while read p
do
  dosya=${p##*/}
  dizin=${p%/*}
  mv "$dizin/$dosya"    "$dizin/${dosya//_/ }"
  fi       
done
ls

çıktıda şöyle bir şeyler diyor.
A_a_S_W_S_W_S_W_S_W___SSSSSQWW Adsız _py.py dosya.bash
Adsız _py 2.py Adsız _sh.bash
A a S W S W S W S W   SSSSSQWW Adsız  py.py dosya.bash
Adsız  py 2.py Adsız  sh.bash

monthy_python

py:~$ /Users/py/Documents/Age\ of\ Empires\ III/boslukyap.command ; exit;
Applications    Google Drive    Pictures        VB_shared       givemecolors
Desktop         Library         Public          VirtualBox VMs
Documents       Movies          SAMPLE_HD       Virtual_Desktop
Downloads       Music           Ubuntu One      dwhelper
/Users/py/Documents/Age of Empires III/boslukyap.command: line 11: syntax error near unexpected token `fi'
/Users/py/Documents/Age of Empires III/boslukyap.command: line 11: `  fi        '
logout

[Process completed]


@hitokiri, "fi"yi silip deneyeceğim, ama korktum, bütün "home" dizinini listeledi bu?  :)
sadece altında çalıştırdığım dizinde çalışacak değil mi?

hitokiri

Tamamen onun terbiyesizliği başka bir şey eklerken , buradaki silinilememiş bi ayıp varsa "fi"'nin ayıbı . :D

Evet hangi dizinde değiştirmek istiyorsan o dizinin içine giriliyor.
cd /falan/filan/döküman
./çalış
şeklinde.

Çekincelerin varsa bir deneme dizini oluşturup , ne olup ne bittiğine bakman uygulama bakımından, biraz içini rahatlatabilir belki. :)

monthy_python

bu tamamdır@hitokiri. oyunun save dosyalarına kavuştuk :)

ikinize de ilginiz için çok teşekkür ederim.