Biorąc pod uwagę następujące pliki:
english_api
english_overview
style.css
Chcę dostać:
english_api.html
english_overview.html
style.css
Innymi słowy, jak dołączyć tekst do wszystkich plików, które nie zawierają kropki ( .
) w katalogu przy użyciu terminala.
Oczywiście w tym folderze jest dużo plików; Właśnie napisałem 3 jako przykład.
Gdybym miał, powiedzmy, wymienić .css
się .html
w tym folderze, chciałbym używać:
rename .css .html *.css
Ale tak naprawdę nie mogę wymyślić sposobu dopasowania plików, które nie zawierają czegoś. Również jak dołączyć (vs zamienić) za pomocą rename
polecenia?
źródło
for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done
polecenie zmienia także nazwy katalogów.Preferuję w takich przypadkach
mmv
. Nie jest instalowany domyślnie w Ubuntu, ale można zainstalować za pomocąsudo apt-get install mmv
polecenia.W twoim przypadku musisz go użyć dwa razy:
Zmień nazwę wszystkich plików z bieżącego katalogu, dodając
.html
na końcu każdej nazwy pliku:Zmień nazwę ponownie (wstecz) na wszystkie pliki, które wcześniej miały w swoich nazwach jeden lub więcej
.
(kropki):Lub w jednym wierszu:
-v
opcja nie jest obowiązkowa. Używam go tylko do pełnego wyjścia, ponieważ bez niegommv
wykonuje działania w ciszy.Zobacz
man mmv
więcej informacji.źródło
Za pomocą polecenia Perl rename (
prename
) możesz dodać warunek, że nazwa pliku musi zawierać kropkę. Jeśli fragment Perla nie zmienia nazwy pliku, plik ten pozostaje nietknięty. Oto kilka sposobów na napisanie tego:źródło
Odpowiedzi są idealne, podaję też inne polecenie, które wykonują tę pracę:
Niektóre wyjaśnienia:
UWAGA :
Wypróbowuję twój scenariusz i polecenie wykonuje zadanie.
źródło
ls
.awk
ish
, spróbuj czegoś takiegoprintf "'%s'\n" -- !(*.*) | awk '{print "mv -- "$0" "$0".html"}' | sh
. Nadal będzie to łamać nazwy plików z nowymi liniami, ale przynajmniej może radzić sobie ze spacjami.--
Jest potrzebne w przypadkach, gdy masz nazwy plików rozpoczynające się-
.