LINUX.ORG.RU

Разделитель строк NUL

 


0

1

Здравствуйте, экспериментирую с командами и не совсем понятны некоторые нюансы:

Есть файлы 'f1' 'f2' 'f3 3', использую xargs, чтобы выполнить команду над каждым:

 find . -print0 | xargs -0 file

тут xargs разделяет элементы null символом и нормально с ними работает, но если попробовать немного по другому:

 ls -1 | uniq -z | xargs -0 file
 ls -1 | grep -z '' | xargs -0 file

Вывод:

f1
f2
f3 3
: cannot open `f1\012f2\012f3 3\012' (No such file or directory)
то уже не работает, хотя -z также разделяет строки нулевым байтом.

 ls -1 | sed 's/.*/&\x00/' | xargs -0 file

После такого выводит:

f1:    empty

f2:   cannot open `\012f2' (No such file or directory)

f3 3: cannot open `\012f3 3' (No such file or directory)

:     cannot open `\012' (No such file or directory)
Объясните, в чем тут загвоздка, почему с print0 все работает, а с другими нет?

Объясните, в чем тут загвоздка, почему с print0 все работает, а с другими нет?

Потому что -z у uniq и grep подразумевает, что и на вход им должны подавать zero-terminating строки. Потому работать будет если заменить ls -1 на find -print0

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.