команда bash для каждого файла в папке

У меня есть набор файлов, к которым я хотел бы применить ту же команду, и вывод должен содержать то же имя, что и обработанный файл, но с другим расширением.

В настоящее время я делаю переименование /my/data/Andrew.doc в /my/data/Andrew.txt Я хотел бы сделать это для всех файлов .doc из папки / my / data / и сохранить имя .

Я пробовал несколько версий, но, похоже, у меня что-то не так в синтаксисе, так как я новичок в Linux.

53
задан 2 July 2013 в 13:12

2 ответа

Есть как минимум сто миллиардов различных способов приблизиться к этому, но вот основные претенденты:

Цикл Bash for

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

Использование find

Команда find содержит прекрасную небольшую команду exec , которая отлично подходит для запуска вещей (с некоторыми оговорками). Найти лучше простого поиска, потому что вы действительно можете фильтровать файлы, которые вы выбираете. Будьте осторожны с нечетным синтаксисом.

find . -iname '*.doc' -exec echo "File is {}" \;

Обратите внимание, что find является рекурсивным, поэтому вы можете использовать -maxdepth 1 , чтобы сохранить find в текущем рабочем каталоге. -тип f может использоваться для фильтрации обычных файлов.

Если мы просто переименуем документ в txt ...

переименуем Команда поиска похожа на sed. Очевидно, это ничего не сделает для преобразования формата.

rename 's/doc$/txt/' *.doc
93
ответ дан 2 July 2013 в 13:12
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done
26
ответ дан 2 July 2013 в 13:12

Другие вопросы по тегам:

Похожие вопросы: