Похоже на работу для xargs :
find buffer/ | grep -i "$varname" | xargs -n1 -I{} -- zip "output/{}.zip" {}
Для varname=""
и папки buffer
, созданной следующим образом:
mkdir buffer
touch buffer/1 buffer/2
Команда будет выполнена:
zip output/buffer/1.zip buffer/1
zip output/buffer/1.zip buffer/2
Возможно, вы захотите удалить часть buffer
из имени файла, для этого мы можем использовать sed 's#^buffer/##'
. Мы можем указать find только список файлов с -type f
. Итак, следующее:
find buffer/ -type f | grep -i "$varname" | sed 's#buffer/##' | xargs -n1 -I{} -- zip "output/{}.zip" buffer/{}
выполнит:
zip output/1.zip buffer/1
zip output/2.zip buffer/2
Чтобы удалить исходные файлы, мы можем сделать что-то вроде этого:
find buffer/ -type f | grep -i "$varname" | sed 's#buffer/##' | xargs -n1 -I{} -- bash -c 'zip "output/{}.zip" buffer/{}; rm "buffer/{}"'
Если вы хотите перебирать файлы и делать что-то более сложное, вы можете использовать во время чтения строки :
find buffer/ -type f | grep -i "$varname" | sed 's#buffer/##' \
| while read -r line; do
zip output/${line}.zip buffer/${line}
rm buffer/${line}
done