У меня есть структура каталоговxargs или хвост дает ошибку с пробелами в именах каталогов
Dir 1
Dir 2
Dir 3
, поэтому каждый из имен каталогов содержит пробел.
В каждом каталоге содержится файл batch_output.txt
. Каждый из этих файлов начинается с строки заголовка, а затем с данными на следующих строках.
Я хочу добавить эти файлы данных, а заголовок один раз наверху (так что заголовок должен быть извлечен только из первого файла, а не повторно). Команда
find . -name batch_output.txt -type f
возвращает пути к batch_output.txt
файлов просто отлично, но моя попытка добавить данные с помощью команды
find . -name batch_output.txt -type f | xargs -n 1 tail -n +2
дает мне ошибки
tail: cannot open ‘./Dir’ for reading: No such file or directory
tail: cannot open ‘1/batch_output.txt’ for reading: No such file or directory
tail: cannot open ‘./Dir’ for reading: No such file or directory
tail: cannot open ‘2/batch_output.txt’ for reading: No such file or directory
tail: cannot open ‘./Dir’ for reading: No such file or directory
tail: cannot open ‘3/batch_output.txt’ for reading: No such file or directory
I think tail имеет проблему с пробелами в именах каталогов.
При условии, что я должен сохранить пробелы в именах каталогов, как решить эту проблему?
Практически работает. Данные добавляются просто отлично, но первый заголовок отсутствует. Я хочу сохранить заголовок в первый раз, но не повторять его позже. Кроме того, я нахожу описание аргумента '-print0' немного неясным. Почему он решает проблему с пробелами в именах каталогов по сравнению с командой без '-print0'. И что делает аргумент '-0' для' xargs' точно? – Adriaan
Вместо того, чтобы завершать каждое имя файла символом новой строки, он завершает его с помощью ASCII 0 или '\ 0'. 'xargs -0' считывает входные данные с нулевым завершением. – anubhava
Прочитайте 'man xargs' и раздел about' -0', который говорит: ** '-0 Измените xargs, чтобы ожидать символов NUL (' '\ 0 '') в качестве разделителей вместо пробелов и строк новой строки. Ожидается, что будет использоваться совместно с функцией -print0 в find (1). ** ** – anubhava