команда bash для кожного файлу в папці


31

У мене є набір файлів, до яких я б хотів застосувати ту саму команду, і вихід повинен містити те саме ім'я, що і оброблений файл, але з іншим розширенням.

В даний час я роблю перейменування /my/data/Andrew.doc в /my/data/Andrew.txt, я хотів би зробити це для всіх .doc файлів з папки / my / data / для збереження імені.

Я спробував кілька версій, але, мабуть, у синтаксисі щось не так, оскільки я новий для Linux.


→ трохи більш повний та практичний приклад: stackoverflow.com/a/43474757/444255
Frank Nocke

Відповіді:


76

Існує щонайменше сто тисяч мільйонів різних способів наблизитись до цього, але ось основні претенденти:

Баш для петлі

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у поточній робочій директорії. -type fможе використовуватися для фільтрації звичайних файлів.

Якщо ми просто перейменуємо doc в txt ...

renameКоманда SED-як в пошуку. Очевидно, що це не призведе до перетворення формату.

rename 's/doc$/txt/' *.doc

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.