Я хочу рекурсивно искать каталог и копировать все файлы XML в новое место. Я могу идентифицировать файлы с:
ls -R | grep .xml$
или с полными путями с:
find . -name \*.xml
Результаты обычных вызовов ls
могут быть переданы в cp
следующим образом:
cp `ls` ./newdir
Но я не могу заставить этот подход работать с рекурсивными поисками - cp
неправильно читает результирующую строку grep и создает много пустых файлов. Самый близкий вопрос SU - использование locate
- не может переместить какие-либо файлы.
Редактировать:
Альтернативный метод:
find . -name \*.xml > xml_list.txt
while read p; do cp $p ./newdir; done <xml_list.txt
.. приводит к списку ошибок (длиннее, чем количество строк) в формате:
cp: pathfilenamesegment: No such file or directory
.. где pathfilenamesegment
- это сегменты строк файла / пути, которые разделены пробелами. Bash, по-видимому, использует строки не как целые, а как сегменты. Однако итератор работает правильно, так как замена echo 1
печатает столько же раз, сколько строк в xml_list.txt
.
Есть ли способ заставить bash распознавать строки как целые строки?