2013-05-29 10 views
5

Więc mam kilka plików, takich jak:Bash skrypt, aby usunąć wiodące białe znaki z plików nazwy

Aaron Lewis - Country Boy.cdg 
Aaron Lewis - Country Boy.mp3 
Adele - Rolling In The Deep.cdg 
Adele - Rolling In The Deep.mp3 
Adele - Set Fire To The Rain.cdg 
Adele - Set Fire To The Rain.mp3 
Band Perry - Better Dig Two.cdg 
Band Perry - Better Dig Two.mp3 
Band Perry - Pioneer.cdg 
Band Perry - Pioneer.mp3 

i muszę mieć wiodącą spacje usunięte w bash skryptu lub ryb.

+0

Czy masz na myśli, że zmieniasz nazwy plików tak, aby nie miały spacji z przodu, czy te nazwy plików są przechowywane w pliku tekstowym i musisz je przetworzyć? – lurker

+0

Chcę zmienić nazwy plików, aby nie miały spacji z przodu. – Acklavidian

Odpowiedz

5

Aby usunąć główną białą przestrzeń char w nazwach plików, które przewidziane można użyć:

IFS=$'\n' 
for f in $(find . -type f -name ' *') 
do 
    mv $f ${f/\.\/ /\.\/} 
done 

to:

  • zmienia IFS tylko być znakami nowej linii; w ten sposób nie dusi białych znaków w nazwach plików.
  • znajduje wszystkie pliki zaczynające się od białych znaków w bieżącym katalogu.
  • przenosi każdy plik do nazwy pliku bez początkowych białych znaków, używając podmiany podłańcuchów bash.
+0

To się udało! Zawsze zapominam o IFS. To właśnie zabijało mój własny scenariusz. Dzięki – Acklavidian

0
for x in \ * ; do 
    mv "$x" `echo "$x" | sed "s/^ +//"` 
done 

To jest szybkie i brudne.

+0

bez wyjścia. Otrzymuję to 'użycie: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source ... directory' – Acklavidian

+0

Interesujące. Uruchomiłem to w powłoce basha i zadziałało to dla mnie. Zrobiłem to ponownie, aby być pewnym: kopiowałem i wklejałem te linie dokładnie do mojego terminala powłoki i zmieniłem nazwę moich plików, które zaczynały się przestrzenią na pliki, które nie zaczynają się od miejsca. Używam Fedory 17 Linux. Jakiego smaku Unix używasz? – lurker

0

cat <file> | sed -e 's/^[ ]*//'

powinno załatwić sprawę. Uchwyć standardowe wyjście i napisz do pliku.

+0

Zamierzam usunąć główne spacje z nazw plików. Nie treść pliku. Dobra próba. – Acklavidian

0

Nie potrzebujesz do tego sed. Wystarczy użyć bash funkcję wyrażenie:

for file in /path/to/files/*; 
    do mv "$file" "${file# *}"; 
done 
Powiązane problemy