2015-08-13 2 views
0

Я пробовал два следующих CMD, чтобы показать содержимое всех файлов в текущем каталоге. Я хочу знать, почему один работает, другой - нет.команда linux: показать содержимое всех файлов

ls | xargs cat # does not work, No such file or directory 

find . | xargs cat # works 

cat это просто пример, это может быть любой CMD, который принимает имя файла в качестве параметра.

--------------------------------- Обновление ------------ ---------------------

Вот некоторые наблюдения с моего ПК.

$ echo 1 > test1.txt 
$ echo 2 > test2.txt 
$ echo 3 > test3.txt 

$ ls 
test1.txt test2.txt test3.txt 

$ ls *.txt | xargs cat 
cat: test1.txt: No such file or directory 
cat: test2.txt: No such file or directory 
cat: test3.txt: No such file or directory 

$ find . -name '*.txt' | xargs cat 
2 
1 
3 
+0

Я не могу воспроизвести поведение, о котором вы сообщаете. Я бы предположил, что это функция имен файлов, которые вы используете. Если я использую имена файлов с пробелами в (например), то я могу получить 'ls | xargs cat' не работает, но команда find, которую вы даете, тоже не работает! Поэтому вам нужно сделать немного больше работы, выясняя, при каких условиях возникает эта проблема. – Vorsprung

+0

@Vorsprung спасибо за ваш ответ. Я добавил «обновление» в своем исходном сообщении, в котором содержатся результаты, полученные с моего компьютера. Пожалуйста, проверьте это. –

+1

ls aliased ни к чему? Формат, который вы видите, указывает не, но, возможно, попробуйте с \ ls, чтобы быть уверенным ... – timdykes

ответ

0

Для других, которые могли бы увидеть это, мы обнаружили проблему в комментариях. Проблема Хао заключалась в том, что ls был псевдонимом, вызывая проблемы с конвейерами xargs для cat.

С помощью 'type ls' они видели, что он был псевдонимом, и использование '\ ls' для удаления псевдонима решило проблему.