Просто. Используйте подстановку, чтобы выбрать нужные файлы, и укажите в кавычках переменную, содержащую имя файла :
.
shopt -s nullglob
for file in./*.txt; do
do_something_with "$file"
done
Вот и все.
Подробнее:
Обновление :подстановка не отвечает за эффект разделения слов, который вы видите. Отсутствие кавычек переменной.
Вы можете получить информацию о файле для ваших условий с помощьюstat
read size mtime < <(stat -c "%s %Y" "$file")
[[ $size -gt 1000 ]] && echo "too big"
[[ $mtime -lt $(date -d yesterday +%s) ]] && echo "too old"
Обновление 2 :Создание имени файла с большим количеством специальных символов требует смешивания различных механизмов цитирования, но с этим файлом по-прежнему можно делать что угодно.
$ filename='~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`'"'"$' \a\t\n\r\f'".txt"
# ^^ single quoted part ^^^^^^^^^^^^^^^^
# double quoted part ^^^
# ANSI-C quoted part ^^^^^^^^^^^^^^
$ echo "$filename"
~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`'
.txt
$ printf "%q\n" "$filename"
$'~ASDFzxcv!@#$%^&*()_+[]\\{}|;:",.<>?`\' \a\t\n\r\f.txt'
$ date > "$filename"
$ cat "$filename"
Thu Apr 12 15:14:29 EDT 2018
$ ls -lt
total 3836
-rw-rw-r-- 1 jackman jackman 29 Apr 12 15:14 ~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`' ?????.txt
︙
$ ls -lt --show-control-chars
total 3836
-rw-rw-r-- 1 jackman jackman 29 Apr 12 15:14 ~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`'
.txt
︙
Если вывод ls
перенаправляется на что-либо, кроме терминала (например, файл или канал ), по умолчанию будет использоваться стиль --show-control-chars
. Вы можете увидеть это, запустив ls -lt | cat
. ls
имеет другие параметры отображения; например, --quoting-style=WORD
.
Анализ вывода wget или его журнала работает. Например,
$ wget -O fixedgear.html https://www.sheldonbrown.com/fixedgear.html 2>&1 | \
awk '/saved/ { print $6 }' | \
sed -e 's/^.//' -e 's/.$//'
README.md
Первый шаг в конвейере пытается загрузить файл, второй ищет wget, чтобы объявить, что файл был успешно сохранен, и если это так, выводит его, а последний шаг просто обрезает кавычки из имени файла.
Настройка значений --tries
и --waitretry
в wget также может помочь вашей первоначальной параллельной загрузке добиться успеха с первого раза.
Использовать GNU Parallel вместоxargs
:
cat links.txt | parallel --joblog my.log -n 2 -P 16 wget -c -q -O
Теперь посмотрите на столбцы Exitval
в my.log
.
Если вы собираетесь использовать значение выхода для повторной попытки, то в GNU Parallel есть опции для повторной попытки задания:--retries
и --retry-failed
.