Вырезание файлов из списка файлов в bash - PullRequest
3 голосов
/ 30 августа 2011

Итак, я хотел бы сделать простую находку в директории с:

find /HOME/ | grep .properties

Затем, используя этот список, я хочу отсеять определенные файлы, скажем, один - server.properties, а другой - testing.properties.

После того, как они были удалены, я хочу сделать быстрый цикл for, который будет передавать каждый оставшийся файл, который не был отфильтрован, в функцию один за другим. Вызов функции просто что-то вроде

extractHash FILE OUTPUTFILE

Надеюсь, это имеет смысл, я постараюсь быть более ясным, если это не так.

Спасибо

Ответы [ 4 ]

3 голосов
/ 30 августа 2011

Используйте while, а не for, для итерации по файлам: for не будет работать так, как вы ожидаете, для итерации по выводу программы с обратным знаком, если есть посторонние пробелы:

find /HOME -name \*.properties \! -name server.propertiees \! -name testing.properties` |
while read -r file; do
    extractHash "$file" OUTPUTFILE
done

Если все ваши файлы находятся в текущем каталоге, используйте расширенный шаблон глобирования, и for подходит для итерации по шаблону имени файла:

shopt -s extglob
for file in !(server|testing).properties; do
  extractHash "$file" out
done
3 голосов
/ 30 августа 2011
for file in "`find ~ -name \*.properties |grep -v -e server.properties -e testfile.properties`"; do
    extractHash $file output
done
1 голос
/ 30 августа 2011

Во-первых, я бы порекомендовал использовать аргумент -name для find вместо передачи каждого имени файла через grep.Тогда вы можете сделать что-то вроде:

for file in `find /HOME -name \*.properties \! -name server.propertiees \! -name testing.properties`; do
    extractHash "$file" OUTPUTFILE
done
1 голос
/ 30 августа 2011

В csh вы должны использовать foreach:

#!/bin/csh 
set files=`find /HOME/ | grep .properties`

foreach file ($files)
  set outfile = $file.out
  extractHash $file $outfile
end

не уверен насчет bash - у него есть аналог для цикла, но я его никогда не изучал:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...