Даны следующие файлы:
english_api
english_overview
style.css
Я хочу получить:
english_api.html
english_overview.html
style.css
Другими словами, как добавить текст ко всем файлам, которые не содержат точку ( .
) в каталоге, используя терминал.
Очевидно, что в этой папке много файлов; Я просто написал 3 в качестве примера.
Если бы я был, позволяет сказать, замените .css
с .html
в этой папке, я хотел бы использовать:
rename .css .html *.css
Но я не могу придумать, как сопоставить файлы, которые не содержат ничего. Также, как добавить (против замены) с помощью rename
команды?
источник
for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done
Команда также переименовывает каталоги.Мои предпочтения в таких случаях есть
mmv
. Он не установлен по умолчанию в Ubuntu, но вы можете установить с помощьюsudo apt-get install mmv
команды.В вашем случае вам нужно использовать его два раза:
Переименуйте все файлы из текущего каталога, добавив
.html
в конце каждого имени файла:Снова переименуйте (верните) все файлы, ранее имевшие в своих именах одну или несколько
.
(точек):Или в одну строку:
-v
опция не обязательна. Я использую его только для подробного вывода, потому что без негоmmv
выполняет действия тихо.Смотрите
man mmv
для получения дополнительной информации.источник
С помощью команды Perl rename (
prename
) вы можете добавить условие, что имя файла должно содержать точку. Если фрагмент Perl не меняет имя файла, этот файл остается без изменений. Вот несколько способов написать это:источник
Ответы идеальны, я также даю вам еще одну команду, которая делает эту работу:
Некоторое объяснение:
НОТА :
Я пытаюсь ваш сценарий и команда сделать работу.
источник
ls
.awk
иsh
, попробуйте что-то вродеprintf "'%s'\n" -- !(*.*) | awk '{print "mv -- "$0" "$0".html"}' | sh
. Это по-прежнему будет нарушать имена файлов с помощью новых строк, но, по крайней мере, оно может иметь дело с пробелами--
Необходим в тех случаях , когда у вас есть имена файлов , начинающиеся с-
.