![Как составить список файлов с полными путями в Linux?](https://rvso.com/image/1345272/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%BC%D0%B8%20%D0%BF%D1%83%D1%82%D1%8F%D0%BC%D0%B8%20%D0%B2%20Linux%3F.png)
В Linux есть ли эквивалент, Dir /s /a /b
где указан полный путь и имя файла? Я новичок в Linux, и без графического интерфейса я хочу получить представление о структуре того, что находится на жестком диске.
решение1
Используйте find
команду. По умолчанию она рекурсивно выведет список всех файлов и папок, начиная с текущего каталога, с полным (относительным) путем.
Если вам нужен полный путь, используйте:
find "$PWD"
Если вам нужен относительный путь, используйте:
find .
Здесь $PWD
— переменная, содержащая текущий рабочий каталог.
Некоторые варианты:
- Если вы хотите ограничить его только файлами или папками, используйте
find "$PWD" -type f
илиfind -type d
соответственно. - Если вы хотите, чтобы он остановился на определенной глубине каталога, используйте
find "$PWD" -maxdepth 2
, например, .
ЧитатьПоиск файловдля подробного руководства по GNU find
, который используется по умолчанию в Linux.
решение2
У меня сегодня был такой же вопрос. Я нашел команду под названием "realpath", вот пример:
$ realpath ~/.bashrc
/home/harleygolfguy/.bashrc
решение3
Решение для Linux:
$ pwd
/home/victoria
$ find $(pwd) -maxdepth 1 -type f -not -path '*/\.*' | sort
/home/victoria/new
/home/victoria/new1
/home/victoria/new2
/home/victoria/new3
/home/victoria/new3.md
/home/victoria/new.md
/home/victoria/package.json
/home/victoria/Untitled Document 1
/home/victoria/Untitled Document 2
$ find . -maxdepth 1 -type f -not -path '*/\.*' | sed 's/^\.\///g' | sort
new
new1
new2
new3
new3.md
new.md
package.json
Untitled Document 1
Untitled Document 2
Примечания:
.
: текущая папка- удалить
-maxdepth 1
для рекурсивного поиска -type f
: найти файлы, а не каталоги (d
)-not -path '*/\.*'
: не возвращать.hidden_files
sed 's/^\.\///g'
: удалить добавленное./
из списка результатов
решение4
Для полноты информации ls -lR /
команда выведет список имен каждого файла, его типов, битов режима файла, количества жестких ссылок, имени владельца, имени группы, размера и временной метки каждого файла (к которому у вас есть разрешение на доступ) от корневого каталога вниз. ( l
для длинного списка, т. е. всей этой информации, R
для рекурсивного просмотра каталогов, /
начиная с корня файловой системы.)
Есть ряд параметров, позволяющих приблизить выходную информацию к dir /S /A
, но, должен признать, я не могу понять, как перевести /B
.
Для получения полезной информации я бы попробовал: ls -lAFGR --si /
где
- l = длинный список (как указано выше)
- A = почти все файлы (не включая . и .. в каждом каталоге, но показывает все скрытые файлы)
- F = показать индикатор файла (один из следующих:
*
для exe-файлов,/
для каталогов,@
для символических ссылок,|
для FIFO,=
для сокетов и>
для дверей) - G = не показывать информацию о группе (удалите это, если хотите ее видеть)
- R = рекурсивно перечислить каталоги (подкаталоги) и
- --si = показать размер файла в удобном для чтения формате, например, 1M (где 1M = 1000B)
ls
может предоставить более простой для чтения обзор каталогов и файлов в этих каталогах, так как find
вывод может быть трудно сканировать, когда файлы содержатся в очень длинных структурах каталогов (охватывающих несколько строк). Следствием этого является то, что каждый файл указан сам по себе (т. е. без информации о пути к каталогу), и вам, возможно, придется вернуться на пару страниц/экранов назад, чтобы найти каталоги, в которых находится определенный файл.
Кроме того, find не содержит информацию /A в команде DIR. Я предложил несколько атрибутов в показанной мной команде (которые по совпадению показывают дополнительную полезность, которую вы получаете от linux по сравнению с определенной проприетарной системой), но если вы прочитаете man
и info
страницы на ls
, вы сможете увидеть, что включать, а что нет.