Как сделать что-то в каждый файл в каталоге с помощью удара?

Другая статья MSDN, которая предоставляет некоторую DOS и DON'Ts и рекомендации для какой метод сравнения использовать в различных случаях: Новые Рекомендации для Использования Строк в Microsoft.NET 2.0

18
задан 21 August 2009 в 07:12
поделиться

4 ответа

Предполагая, что вы хотите что-то сделать только с файлами, простое решение - проверить, является ли $ i файлом:

for i in * 
do
    if test -f "$i" 
    then
       echo "Doing somthing to $i"
    fi
done

Вы действительно должны всегда проводить такие тесты, потому что вы почти наверняка не ' Я не хочу обращаться с файлами и каталогами одинаково. Обратите внимание на кавычки вокруг символа «$ i», которые предотвращают проблемы с именами файлов, содержащими пробелы.

43
ответ дан 30 November 2019 в 05:49
поделиться

find может быть тем, что вам нужно.

find . | while read file; do
    # do something with $file
done

Или может быть так:

find . -exec <command> {} \;

Если вы не хотите, чтобы поиск включал подкаталоги, вам может потребоваться добавить комбинацию -type f и -maxdepth 1 для команды поиска. Подробности см. На странице руководства find .

12
ответ дан 30 November 2019 в 05:49
поделиться

Это зависит от того, собираетесь ли вы вводить это в командной строке и какую команду применяете к файлам.

Если она введена, вы можете выбрать второй вариант и замените команду чем-нибудь безобидным. Например, мне нравится использовать echo вместо mv или rm.

Поместите все в одну строку:

for i in * ; do command $i; done

Когда это сработает - или вы увидите, где это не удается, и безопасно ли это, вы можете нажать стрелку вверх , отредактируйте команду и повторите попытку.

8
ответ дан 30 November 2019 в 05:49
поделиться

это должно помочь:

find -type d -print0 | xargs -n 1 -0 echo "your folder: {} !"
find -type f -print0 | xargs -n 1 -0 echo "your file: {} !"

print0 / 0 позволяет избежать проблем с пробелами

2
ответ дан 30 November 2019 в 05:49
поделиться