Я предпочитаю решение, данное здесь автором Карлом Уилбуром, поскольку оно не требует "предварительных" шагов, таких как запуск скрипта.
Суть:
и вы выбрали все необходимые выходные данные.
Другой способ — использовать «Правка» -> «Выбрать все» в меню «Терминал». Но речь идет только обо всем выборе вывода.
Подход readarray
является самым простым, но если вы используете оболочку, которая его не поддерживает, вместо этого вы можете попробовать следующее, что должно работать в любой оболочке POSIX:
while IFS= read -r pathname; do
find "$pathname" -type f
done < pathlist.txt
Если вы используете реализацию xargs в GNU, вы можете использовать параметр -d
для установки разделителя, в данном случае новой строки.
Демо:
xargs -d '\n' -I{} printf '<<%s>>\n' '{}' <<END
abc def
unix and linux
END
<<abc def>>
<<unix and linux>>
Таким образом, первый удар по вашей команде будет
xargs -a pathlist.txt -d '\n' -I{} -- \
find '{}' -type f -printf "%p, %AY-%Am-%Ad \n"
Здесь есть две проблемы:
find
экземпляров, поскольку замена xargs -I
подразумевает -L1
. Вы можете решить первую проблему, используя GNU printf %q
для создания экранированных строк для оболочки:
find $(xargs -a pathlist.txt -d '\n' printf '%q\n') \
-type f -printf "%p, %AY-%Am-%Ad \n"
Для второго рассмотрите возможность разделения с помощью \0
вместо этого и использования xargs -0
, чтобы использовать его в качестве разделителя.