-1

Я хочу использовать команду ls чтобы результат выглядел так:

folder1/file1.doc
folder1/file2.doc
folder1/file44.doc
folder3/file1.doc
folder66/file4.doc
folder999/file.doc

Другими словами, я хочу вывести имя каталога, а также имя файла для каждой строки.

cd myfolder
ls * > output.txt

Я думаю, что мне нужно добавить несколько команд в строку ls выше.

Можно ли это сделать с помощью ls?

3 ответа3

0

Гораздо проще использовать find:

find folder* -type f > output.txt

Подстановочный знак будет распространяться на все имена папок и будет рекурсивно перечислять файлы с указанием пути к ним с именем папки.

0

Если у вас есть только один уровень (то есть все ваши текущие подкаталоги не имеют подкаталогов в них), то

ls -1 */*

должен делать то, что вы хотите. Обратите внимание, что опция - номер один, а не буква ell.

Если у вас есть подкаталоги, но вам не нужны списки файлов этих подкаталогов, то

ls -1d */*

должен делать то, что вы хотите. Опять же, варианты один, а не все.

Если расположение файла слишком сложное, вам понадобится оператор find например

find . -print | sed s:./::
0

Как обсуждалось недавно в разделе Получение всех путей к файлам с определенной точки ... (в AU), вы можете сделать это следующим образом:

shopt -s globstar
ls -d1 **

Обратите внимание, что параметры ls - это строчные буквы D и номер один.  Обратите внимание, что ls здесь ничего не делает, кроме перечисления аргументов; Вы могли бы также сказать

printf "%s\n" **

Они не ограничены определенным количеством уровней.

Если вы хотите включить имена, начинающиеся с точки (.), Вы также должны shopt -s dotglob .

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