Nazwałem wiele plików ze spacjami i chcę je zastąpić _
. Jednak za każdym razem, gdy piszę polecenie w powłoce o nazwie pliku (np. Spring 2011
), Powłoka nie rozpoznaje pliku lub katalogu.
Co mogę z tym zrobić? Czy jest jakiś sposób na użycie znaku Unicode dla spacji?
bash
pętli for: zobacz moje rozwiązanie tutaj .Odpowiedzi:
Escape the space, np.
Spring\ 2011
Lub użyj cudzysłowów, np'Spring 2011'
. W przyszłości zwykle źle jest używać nazw plików ze spacjami w dowolnym systemie * NIX.Jeśli masz
rename
, możesz użyć tego:źródło
rename
wersję 2.23)Jeśli twoje urządzenie ma polecenie zmiany nazwy , spowoduje to zmianę wszystkich spacji na podkreślenia we wszystkich plikach / katalogach w bieżącym katalogu roboczym:
źródło
rename --version
rename from util-linux 2.23.2
.Jeśli nie masz
rename
lub wolisz używać tylko powłoki:Zepsuty:
*\ *
wybiera wszystkie pliki ze spacją w nazwie jako dane wejściowe dlafor
pętli."$f"
są ważne, ponieważ wiemy, że w nazwie pliku jest spacja, w przeciwnym razie wyglądałoby to na ponad 2 argumentymv
.${f//str/new_str}
jest specyficzną dla bash funkcją podstawiania łańcucha. Wszystkie wystąpieniastr
są zastępowane przeznew_str
.źródło
for f in *\ *; do mv "$f" "${f// /_}"; done
gomv "Spring 2011.file" Spring_2011.file
powinien powiedzieć linii poleceń, aby wziął cytowany ciąg jako pojedyncze wejście.źródło
Aby programowo zmienić nazwy plików N, możesz użyć prostej
bash
pętli for.Jeśli masz mniej niż 5 nazw plików, możesz ręcznie wpisać wszystkie nazwy plików i użyć
rename
polecenia, jak sugeruje powyższe rozwiązanie . Ale dla mnie ... Wolę rozwiązanie programowe ... nawet jeśli są tylko 4 pliki.ps
jeśli nie znasz
Bash
rozszerzenia parametrów (tj.${filename// /_}
), możesz użyćrename
polecenia:źródło