Мне нужен файл (желательно .list файл), который содержит абсолютный путь каждого файла в каталоге.
Пример dir1: file1.txt file2.txt file3.txt
listOfFiles.list
:
/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt
Как я могу сделать это в Linux / Mac?
command-line
ls
filenames
arabian_albert
источник
источник
ls -d -1 $PWD/*
-1
опция гарантирует, что вы получите одно имя файла на строкуls
обнаруживает, выводится ли файл или терминал.find
Ответ Энди Далтона - лучшее решение, так как оно не подведет, сколько бы файлов ни было в списке.Вы можете использовать найти. Предполагая, что вы хотите только обычные файлы, вы можете сделать:
Вы можете настроить параметр типа соответствующим образом, если вам нужны другие типы файлов.
источник
ls
. Этоfind
делает рекурсивные подкаталоги, для нерекурсивных вы должны добавить-maxdepth 1
перед-type
аргументом.Обратите внимание, что в:
Это оболочка, которая вычисляет список (не скрытых) файлов в каталоге и передает список
ls
.ls
просто распечатывает этот список здесь, чтобы вы могли также сделать:источник
printf
имеет дополнительный бонус, что вы не получите ошибку «слишком длинная командная строка», если у вас есть тысячи файлов, поскольку ониprintf
не запускаются как отдельный процесс.printf
нет встроенныхpdksh
функций, и некоторых из его производных или большинства версий оболочки Bourne. Один недостаток по сравнению с темls -d
, что если там нет не скрытого файла, он напечатает, в/path/to/*
то время какls
вы получите ошибку о том, что этот файл не существует.Чтобы увидеть только обычные файлы -
источник
Вы можете просто использовать
realpath
илиreadlink
:xargs
строить и выполнять командные строки из стандартного ввода.realpath
: вернуть канонизированный абсолютный путьreadlink
: прочитать значение символической ссылкиисточник
dpkg -S /usr/bin/realpath
. Проверьте это .Другой способ с
tree
не упомянутым здесь, он идет рекурсивно и в отличие от find, или если у вас нет ошибок (например,:)Permission denied
,Not a directory
вы также получаете абсолютный путь на случай, если вы хотите передать файлыxargs
или другую командуварианты значения:
Для установки
tree
:sudo apt install tree
в Ubuntu / Debiansudo yum install tree
на CentOS / Fedorasudo zypper install tree
на OpenSUSEисточник
sudo apt install tree
в Ubuntusudo yum install tree
для CentOSsudo zypper install tree
в OpenSUSEbrew install tree
на MacВ прошлой среде Linux у меня была
resolve
команда, которая стандартизировала пути, включая превращение относительного пути в абсолютный путь. Я не могу найти это сейчас, так что, возможно, это было написано кем-то из этой организации.Вы можете создать свой собственный скрипт, используя функции из стандартных библиотек Python или Perl (и, возможно, других языков).
resolve.py
:resolve.pl
:Тогда вы решите свою проблему с помощью:
С помощью этой команды вы также можете делать такие вещи:
источник