Ответ 1
Вы можете использовать что-то вроде этого:
for old in *.txt; do mv $old `basename $old .txt`.md; done
Сделайте копию первой!
У меня есть каталог, полный файлов с одним расширением (в данном случае .txt), которые я хочу автоматически преобразовать в другое расширение (.md).
Есть ли простой однострочный терминал, который я могу использовать для преобразования всех файлов в этом каталоге в другое расширение?
Или мне нужно написать скрипт с регулярным выражением?
Вы можете использовать что-то вроде этого:
for old in *.txt; do mv $old `basename $old .txt`.md; done
Сделайте копию первой!
В качестве альтернативы вы можете установить утилиту ren
(rename)
brew install ren
ren '*.txt' '#1.md'
Если вы хотите переименовать файлы с префиксом или суффикс в именах файлов
ren 'prefix_*.txt' 'prefix_#1.md'
Терминал не нужен для этого... Просто выделите все файлы, которые вы хотите переименовать. Щелкните правой кнопкой мыши и выберите "Переименовать ## элементы" и просто введите ".txt" в поле "Найти:" и ".md" в поле "Заменить на:".
Предпочитаемый способ Unix для этого (да, OS X основан на Unix):
ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/' | sh
Зачем цитировать с помощью for
, если ls
по контуру дизайна через весь список имен файлов? У вас есть трубы, используйте их. Вы можете создавать/изменять не только вывод с использованием команд, но также и команды (справа, это команды, созданные командой, что Брайан Керниган, один из изобретателей Unix, больше всего понравился в Unix), так что давайте посмотрим, что ls
и sed
получается путем удаления трубы до sh
:
$ ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/'
mv "firstfile.txt" "firstfile.md"
mv "second file.txt" "second file.md"
$
Как вы можете видеть, это не только однострочный, но и полный script, который, кроме того, работает, создавая еще один script как вывод. Поэтому давайте просто загрузим script, созданный однострочным script в sh
, который является интерпретатором script OS X. Конечно, он работает даже для имен файлов с пробелами в нем.
BTW: каждый раз, когда вы вводите что-то в терминале, вы создаете script, даже если это только одна команда с одним словом вроде ls
или date
и т.д. Все, что работает в оболочке Unix, всегда равно script/program, который представляет собой лишь некоторый поток на основе ASCII (в данном случае поток команд, противоположный потоку данных).
Чтобы увидеть фактические команды, выполняемые sh
, просто добавьте параметр -x
после sh
, который включает вывод отладки в оболочке, поэтому вы увидите каждую команду mv
, выполняемую с фактическим аргументы, переданные редактором sed
script (да, еще один script внутри script:-)).
Однако, если вам нравится сложность, вы можете даже использовать awk
, и если вы хотите установить другие программы, чтобы выполнить основную работу, есть ren
. Я знаю даже людей, которые предпочли бы написать 50 строк или около того perl
script для этой простой повседневной задачи.
Может быть, проще в finder переименовать файлы, но если он подключен удаленно к Mac (например, через ssh
), использование finder вообще невозможно. То почему линия cmd все еще очень полезна.
Основываясь на выбранном и наиболее точном ответе выше, здесь функция bash для повторного использования:
function change_all_extensions() {
for old in *."$1"; do mv $old `basename $old ."$1"`."$2"; done
}
Использование:
$ change_all_extensions txt md
(Я не мог понять, как получить чистое форматирование кода в комментарии к этому ответу.)
Не нужно писать script, чтобы просто нажать эту команду
find ./ -name "*.txt" | xargs -I '{}' basename '{}' | sed 's/\.txt//' | xargs -I '{}' mv '{}.txt' '{}.md'
У меня была аналогичная проблема, когда файлы были названы .gifx.gif
в конце, и это сработало в OS X, чтобы удалить последний .gif
:
for old in *.gifx.gif; do
mv $(echo "$old") $(echo "$old" | sed 's/x.gif//');
done
cd $YOUR_DIR
ls *.txt > abc
mkdir target // say i want to move it to another directory target in this case
while read line
do
file=$(echo $line |awk -F. '{ print $1 }')
cp $line target/$file.md // depends if u want to move(mv) or copy(cp)
done < abc
Для тех из вас, кто не очень хорош в программировании, вы можете проверить эту статью на wiki как. показывает много методов, которые не связаны с кодированием
, и вы также можете проверить этот blogpost на изменении расширений файлов. < ш > Он содержит консольное приложение, которое делает все необходимое для вас.