Правильный способ зацикливания набора файлов, расположенных с помощью find
, - это конструкция с чтением, поэтому:
while IFS= read -r -d '' line ; do
echo "$line" >> set1.txt
while IFS= read -r -d '' file ; do
printf '"%s"\n' "$file" >> set2.txt
done < <(find "$line" -type f -name \*.zip -mtime +2 -print0)
done < <(find /home -type d -name assets -print0)
Для ясности я присвоил переменной внутреннего цикла другое имя.
Если у вас не было bash
, вам нужно было бы отдельно ввести команду find
и перенаправить вывод в файл, а затем прочитать файл с помощью while read ; do .. done < filename
.
Примечание.что каждое расширение каждой переменной заключено в двойные кавычки.Это необходимо.
Обратите внимание, однако, что для того, что вы хотите, вы можете просто использовать переключатель -printf
на find
, если у вас есть GNU find
.
find /home -type f -path '*/assets/*.zip' -mtime +2 -printf '"%p"\n' > set2.txt
Хотя, как отмечает @sarnold, это небезопасно.