2014-12-07 1 views
23

Многие обнаружат, что это повторяющиеся вопросы, но я задал все вопросы, прежде чем задавать эту тему, но никто не работал для меня.Список файлов с использованием команды ls в Linux с полным путем

Я хочу напечатать полное имя пути для определенного формата файла с помощью команды ls. До сих пор я нашел фрагмент кода, который будет печатать все файлы в каталоге, но не полный путь.

for i in io.popen("ls /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do 
    if string.find(i,"%.*$") then 
    print(i) 
    end 
end 

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

Выход:

0020111118223425.lvf 
    2012 
    2012 (2009).mp4 
    3 Idiots 
    Aashiqui 2 
    Agneepath.mkv 
    Avatar (2009) 
    Captain Phillips (2013) 
    Cocktail 

Я хочу выход как:

/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/0020111118223425.lvf   [File in Root Directory] 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012/2012.mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012 (2009).mp4    [File in Root Directory] 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/3 Idiots/3 Idiots.mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Aashiqui 2/Aashiqui 2.mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Avatar (2009)/Avatar (2009).mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Captain Phillips (2013).mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Cocktail/Cocktail.mkv 

EDIT: Я использовал все это, но он не работает с моим кодом в LUA.

, когда я с моим кодом отображается неверный каталог

for i in io.popen("ls -d $PWD/* /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do 
    if string.find(i,"%.*$") then 
     print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/"..i) 
    end 
    end 

не находит файлы в «/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7» InstEd его печатает файлы каталога машин корневые.

+0

Возможный дубликат [команды LS: как я могу получить рекурсивный полный путь листинга, по одной строке на файл] (http://stackoverflow.com/questions/ 1767384/ls-command-how-can-i-get-a-recursive-full-path-listing-one-line-per-file) –

ответ

24

Вы можете использовать

ls -lrt -d -1 $PWD/{*,.*} 

Он также поймает скрытые файлы.

+0

Как это будет работать с моим кодом. для i в io.popen ("ls /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 "): линии() делать если string.find (я," % * $ "), а затем печати (я) конца конца –

+1

@ user1640175' для ввода в io.popen (" LS -lrt -d. -1 /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 /{*,.*} ")' – Totoro

+0

Получил это сработало спасибо –

0

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

print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/" + i)

Это будет распечатать каталог с именем.

+0

Это не будет работать с subdiractory. adn также я хочу реализовать в lua, поэтому я думаю, что вы говорите мне делать как print ("/ mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 /" .. i) –

+0

Ваш код использует строковый литерал. Я только скопировал и вставил его. Было бы тривиально внести изменения в ваш сценарий lua, который позволит вам вызвать это в любом каталоге и получить желаемые результаты. –

0

Существует более чем один из способов сделать это, самый простой, я думаю, что было бы:

find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 

также это должно работать:

(cd /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7; ls | xargs -i echo `pwd`/{}) 
17

Вы можете попробовать это:

ls -d $PWD/* 
+4

ls -d" $ PWD "/ * для учета путей с пробелами на них. –

+1

Для пустых каталогов это бросает' Нет такого файла или каталога'. ожидал, что просто не увидит ничего подобного при выполнении 'ls' в пустом каталоге, но не исключение. – schreon

2

Это печатает все файлы рекурсивно из текущего каталога.

find "$PWD" | awk /.ogg/ # filter .ogg files by regex 
find "$PWD" | grep .ogg # filter .ogg files by term 
find "$PWD" | ack .ogg # filter .ogg files by regex/term using https://github.com/petdance/ack2 
10

Для перечисления все с полным путем, только в текущем каталоге

find $PWD -maxdepth 1 

То же, что и выше, но только соответствует определенному расширению, нечувствительны к регистру (.ш файлы в данном случае)

find $PWD -maxdepth 1 -iregex '.+\.sh' 

$ PWD для текущего каталога, он может быть заменен на любой каталог

mydir="/etc/sudoers.d/" ; find $mydir -maxdepth 1 

maxdepth мешает найти вдаваясь в подкаталоги, к примеру, вы можете установить его на " 2 "для перечисления предметов у детей. Просто удалите его, если вам нужно его рекурсивно.

Чтобы ограничить это доступным файлом, можете использовать опцию -type f.

find $PWD -maxdepth 1 -type f 
+1

Попробовав всевозможные решения, это единственный, который я мог бы найти, который будет работать 1) рекурсивно, в то время как 2) ссылается на символические ссылки и 3) печатает весь путь (который мне нужен для '| grep'). Благодаря! –

4

Вы можете легко использовать следующие в списке только файлы:

ls -d -1 $PWD/*.* 

следующие к списку каталогов:

ls -d -1 $PWD/** 

следующие перечислить все (файлы/каталоги):

ls -d -1 $PWD/**/* 

Mor е полезные опции:

-d список каталогов не их содержание

-R рекурсивный

-1 список один файл на строку

-l использовать длинный список формат

- список всех, включая записи, начинающиеся с. и ..

-В список всех, кроме указанных, не указано. и ..

для получения дополнительной информации, просто введите следующую

ls --help 
0

Я имел этот вопрос, и я использую следующее:

Ls -dl $ PWD/* | grep $ PWD

Это всегда имело у меня объявление, которое я хотел, но ваш пробег может отличаться.

0

Это работает для меня:

ls -rt -d -1 $PWD/{*,.*} 
+2

Не могли бы вы рассказать о флагах, используемых в вашем коде? – Jublo

+0

Спасибо Фритты за обновления –

+0

'$ man ls' может быть полезным –