#linux #bash #sorting #sed #concatenation
#linux #bash #сортировка #sed #объединение
Вопрос:
Это работает:
find . -name "*.1" -print0 | xargs -0 cat > list.txt
Но когда я пытаюсь отсортировать имена файлов, удалите новую строку, список имен файлов, которые передаются в cat, выглядит идентично предыдущему, но отсортирован:
find . -name "*.1" | sort | sed ':a;N;$!ba;s/n//g' | xargs -0 cat > list.txt
Однако cat возвращает эту ошибку:
: No such file or directory
Ответ №1:
Ваш оператор xargs ожидает записи с завершением null.
find . -name '*.1' | sort | tr 'n' ' ' | xargs cat > list.txt
Если в ваших именах файлов или каталогов есть пробелы, тогда да, используйте способ с нулевым завершением.
Ответ №2:
Просто используйте терминаторы nul до конца:
find . -name "*.1" -print0 | sort -z | xargs -0 cat > list.txt
Ваша попытка не удалась, потому что вы просто удалили все переводы строк (эффективно объединив все имена файлов). В терминале это отображается так же, как имена файлов, разделенные NUL, но работает по-другому.