Поиск файлов с помощью удара find
команда, я хотел бы связать получающиеся файлы в новый файл. Например, если команда находки уступает:
find . -name "configuration_dev.txt"
./tmp/configuration1/configuration_dev.txt
./tmp/configuration2/configuration_dev.txt
Я хотел бы связать содержание этих двух файлов в новый файл непосредственно как команда удара.
Команда для достижения желаемого результата:
find . -name "configuration_dev.txt" -exec cat > testing.txt {} +
Хорошее объяснение вышеупомянутой строки дано здесь: Что означает {} + в находке - исполнительная команда?
Один возможный способ сделать это путем передачи по каналу вывода find
кому: xargs
и свяжите содержание файлов cat
, затем можно перенаправить вывод в новый файл:
find . -name '*file*' | xargs -I{} cat "{}" > output
Вышеупомянутая команда будет звонить cat
для каждого файла и затем всего вывода xargs
оператор будет перенаправлен к output
файл. Более эффективный путь состоит в том, чтобы использовать пустой разделитель - благодаря @pLumo для этого обновления:
find . -name '*file*' -print0 | xargs -0 cat > output
Можно также открыть несколько файлов в cat
и перенаправьте вывод в новый файл. Так как названия нескольких файлов были бы возвращены find
, можно использовать ту внутреннюю часть cat
использование `
(обратная галочка):
cat `find . -name "configuration_dev.txt"` > testing.txt
Команда между обратными галочками была бы выполнена и заменена выводом команды, удаляющей запаздывающий символ новой строки и вставляющей пробел.
Можно подтвердить это путем выполнения
A=`find . -name "configuration_dev.txt"`
echo $A
Поскольку Вы найдете, что вывод был бы чем-то как:
./tmp/configuration/configuration_dev.txt ./tmp/configuration/configuration_dev.txt
Таким образом фактическое cat
команда под капотом будет:
cat ./tmp/configuration/configuration_dev.txt ./tmp/configuration/configuration_dev.txt > testing.txt