Рекурсивный список файлов в CLI Linux с указанием пути относительно текущего каталога - PullRequest
211 голосов
/ 29 октября 2008

Это похоже на этот вопрос , но я хочу включить путь относительно текущего каталога в unix. Если я сделаю следующее:

ls -LR | grep .txt

Не включает полные пути. Например, у меня есть следующая структура каталогов:

test1/file.txt
test2/file1.txt
test2/file2.txt

Приведенный выше код вернет:

file.txt
file1.txt
file2.txt

Как я могу заставить его включать пути относительно текущего каталога, используя стандартные команды Unix?

Ответы [ 13 ]

287 голосов
/ 29 октября 2008

Используйте находку:

find . -name \*.txt -print

В системах, использующих GNU find, как и в большинстве дистрибутивов GNU / Linux, вы можете не указывать -print.

70 голосов
/ 28 апреля 2010

Используйте tree, с -f (полный путь) и -i (без строк отступа):

tree -if --noreport .
tree -if --noreport directory/

Затем вы можете использовать grep, чтобы отфильтровать те, которые вам нужны.


Если команда не найдена, вы можете установить ее:

Введите следующую команду для установки дерева команд в RHEL / CentOS и Fedora linux:

# yum install tree -y

Если вы используете Debian / Ubuntu, Mint Linux введите следующую команду в вашем терминале:

$ sudo apt-get install tree -y
25 голосов
/ 29 октября 2008

Попробуйте find. Вы можете найти это точно на странице руководства, но это как-то так:

find [start directory] -name [what to find]

так для вашего примера

find . -name "*.txt"

должен дать вам то, что вы хотите.

9 голосов
/ 29 октября 2008

Вместо этого вы можете использовать find:

find . -name '*.txt'
5 голосов
/ 15 марта 2016

Это делает трюк:

ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"

Но он делает это, "грешив" с помощью парсинга ls, что считается плохой формой сообществ GNU и Ghostscript.

4 голосов
/ 30 декабря 2011

Чтобы получить действительные полные имена файлов нужных файлов с помощью команды find, используйте ее с командой pwd:

find $(pwd) -name \*.txt -print
4 голосов
/ 15 октября 2009
DIR=your_path
find $DIR | sed 's:""$DIR""::'

'sed' сотрет 'your_path' со всех результатов 'find'. И вы получаете относительно пути «DIR».

1 голос
/ 21 августа 2013

Если вы хотите сохранить детали, поставьте в выводе ls, например, размер файла и т. Д., Это должно работать.

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file
1 голос
/ 23 февраля 2013

Найдите файл с именем «filename» в вашей файловой системе, начиная поиск из корневого каталога «/». «Имя файла»

find / -name "filename" 
1 голос
/ 30 марта 2011

Вы можете создать функцию оболочки, например, в вашем .zshrc или .bashrc:

filepath() {
    echo $PWD/$1
}

filepath2() {
    for i in $@; do
        echo $PWD/$i
    done
}

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

...