2013-05-08 28 views
11

Mam sytuację, w której muszę codziennie przekraczać 400+ plików w folderze na Xsan i zastępować spacje pod-wynikami w nazwach plików plików.Usuwanie spacji z nazw plików w folderze

Czy ktoś ma skrypt pod ręką, który mogę uruchomić przez terminal, na przykład, który zrobi to za mnie?

Odpowiedz

30

Proszę, to pętle przez wszystkie pliki (i foldery) w bieżącym katalogu:

for oldname in * 
do 
    newname=`echo $oldname | sed -e 's/ /_/g'` 
    mv "$oldname" "$newname" 
done 

Proszę pamiętać, że będzie nadpisanie plików o tej samej nazwie. Oznacza to, że jeśli istnieją dwa pliki, które mają identyczne nazwy plików, ale jeden ma podkreślenia, gdzie drugi ma spacje. W tej sytuacji ten, który miał podkreślenia, zostanie nadpisany tym, który miał spacje. Ta dłuższa wersja pominie te przypadki:

for oldname in * 
do 
    newname=`echo $oldname | sed -e 's/ /_/g'` 
    if [ "$newname" = "$oldname" ] 
    then 
    continue 
    fi 
    if [ -e "$newname" ] 
    then 
    echo Skipping "$oldname", because "$newname" exists 
    else 
    mv "$oldname" "$newname" 
    fi 
done 
+0

Jaka jest funkcja podwójnych cudzysłowów w poleceniu mv? Czy ta linia jest odpowiednikiem mv $ (oldname) $ (newname)? –

+0

Bez podwójnych cudzysłowów nazwy plików ze spacjami mogą powodować problemy. I nie, nie równoważne. Składnia '$()' służy do podstawiania komend: https://en.wikipedia.org/wiki/Command_substitution –

+1

ghhhaaaa Chcę to zrobić rekurencyjnie i trafić również wszystkie podkatalogi ... –