4

Цель не состоит в том, чтобы вывести список файлов temp/run*.* . Цель состоит в том, чтобы понять, почему вторая команда не работает.

Первая команда:

find . \( -name 'temp' \) -print0 | xargs -0 -L 1 -I datafind ls -ltr datafind

перечислить все файлы внутри временных папок из фактического каталога

Вторая команда:

find . \( -name 'temp' \) -print0 | xargs -0 -L 1 -I datafind ls -ltr datafind/run*.*

дает не может получить доступ к ошибке в каждом каталоге, который работал с предыдущей командой.

Я искал и читал справочные страницы и примеры, но не могу найти, почему вторая команда не работает. Любая подсказка, пожалуйста?

1 ответ1

4

Путаница заключается в том, что подстановочные символы, такие как * и *.* , Оцениваются оболочкой при вводе команды.

Поэтому datafind/run*.* Оценивается оболочкой и заменяется именами файлов, которые соответствуют этому, но не находит никаких файлов, которые соответствуют. Таким образом, datafind/run*.* Передается команде xargs а затем передается через команду ls .

Команда ls не понимает подстановочные знаки, поэтому она просто берет свой ввод и пытается найти файл с таким именем. Нет файла с именем run*.* Поэтому вы получите сообщение об ошибке Нет такого файла или каталога.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .