У меня есть набор файлов, к которым я хотел бы применить ту же команду, и вывод должен содержать то же имя, что и обработанный файл, но с другим расширением.
В настоящее время я делаю переименование /my/data/Andrew.doc в /my/data/Andrew.txt Я хотел бы сделать это для всех файлов .doc из папки / my / data / и сохранить имя .
Я пробовал несколько версий, но, похоже, у меня что-то не так в синтаксисе, так как я новичок в Linux.
Есть как минимум сто миллиардов различных способов приблизиться к этому, но вот основные претенденты:
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
может использоваться для фильтрации обычных файлов.
переименуем
Команда поиска похожа на sed. Очевидно, это ничего не сделает для преобразования формата.
rename 's/doc$/txt/' *.doc
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done