Get path of here document as a file

while read dir;
  do
    rm -r "$dir"/thumbnails;
done < <(while read file; do dirname "$file"; done < <(find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4) | sort -u)

Это выполняется с помощью подстановки процесса внутри подстановки процесса.

Он находит файлы на основе критериев OP, получает имя каталога каждого файла jpg в цикле while, сортирует и удаляет дубликаты (на основе @heemayl), затем считывает это в цикле while, чтобы удалить каталог эскизов.

2
22.10.2015, 23:46
2 ответа

Один из способов сделать это — использовать -сокращение для стандартного ввода с такими вот документами

command - <<EOF
<file>
  <contents />
</file>
EOF
0
25.09.2021, 04:20

То, как оболочка реализует здесь -документы различаются между оболочками, и то, что используется за кулисами, может различаться в зависимости от факторов времени выполнения. Оболочка bash, например, пытается использовать канал внутри процесса оболочки для документов короче, чем размер канала системы.

Вы можете получить доступ к стандартному потоку ввода, прочитав из /dev/fd/0или /dev/stdinв большинстве систем Unix. Их доступность не гарантируется, но сегодня они реализованы в большинстве доступных систем Unix.

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

thecommand /dev/stdin <<'END_XML'
Some XML document
goes here.
END_XML

Использование /dev/stdinтаким образом будет работать до тех пор, пока вашей команде не нужно выполнять поиск в заданном файле. Если это так, вы можете вместо этого временно записать ввод в реальный файл:

tmpfile=$(mktemp) || exit

cat <<'END_XML' >"$tmpfile"
Some XML document
goes here.
END_XML

thecommand "$tmpfile"
rm "$tmpfile"

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

sed -f /dev/stdin file <<'END_SED'
Some sed script
goes here
END_SED
1
26.09.2021, 15:24

Теги

Похожие вопросы