Использование поиска внутри некоторое время l oop работает, но поиск будет выполняться в каждой строке файла, другой альтернативой является сохранение списка в массиве, так что find может искать каталоги в списке в одном поиске.
Если у вас есть bash4 +, вы можете использовать mapfile.
mapfile -t directories < filenames.list
Если вы застряли в bash3.
directories=()
while IFS= read -r line; do
directories+=("$lines")
done < filenames.list
Теперь, если вы только после одного файла введите похожие файлы, заканчивающиеся на *.csv
.
find "${directories[@]}" -type f -name '*.csv' -exec sh -c 'cp -v -- "$@" /newdirectory' _ {} +
Если у вас есть несколько типов файлов для сопоставления и несколько каталогов для копирования файлов.
while IFS= read -r -d '' file; do
case $file in
*.csv) cp -v -- "$file" /foodirectory;; ##: csv file copy to foodirectory
*.mp3) cp -v -- "$file" /bardirectory;; ##: mp3 file copy to bardirectory
*.avi) cp -v -- "$file" /bazdirectory;; ##: avi file copy to bazdirectory
esac
done < <(find "${directories[@]}" -type f -print0)
find print0
будет работать с прочитайте -d ''
при работе с файлами с пробелами и переводами строки. см. Как мне найти и обработать имена файлов, содержащие переводы строк, пробелы или оба?
--
есть, так что если у вас есть проблемное c имя файла, которое начинается с da sh -
cp
не будет интерпретировать его как option
.