it-swarm.com.ru

Список файлов с помощью команды 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

Правка: Я использовал все это, но он не работает с моим кодом в 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", печатает файлы корневых каталогов компьютеров.

28
Prakash.DTI

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

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

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

35
Totoro

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

ls -d $PWD/*
27
mgigirey

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

find $PWD -maxdepth 1

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

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
12
sdkks

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

ls -d -1 $PWD/*.*

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

ls -d -1 $PWD/**

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

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

Более полезные варианты:

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

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

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

я использую длинный список

-списать все, включая записи, начинающиеся с. а также ..

-Списать все, но не список подразумеваемых. а также ..

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

ls --help 
4
msoliman

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

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
2
user2188875

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

ls -dl $ PWD/* | grep $ PWD

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

0
Bruce Staples

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

ls -rt -d -1 $PWD/{*,.*}
0
HARSH PATHAK

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

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

Это распечатает каталог с именем файла.

0
Leland Barton

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

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`/{})
0
Jose Rey

вам просто нужен полный путь, почему бы не использовать предназначенную для этого утилиту комбинация readlink и grep должна получить то, что вы хотите

grep -R  '--include=*.'{mkv,mp4} ? | cut -d ' ' -f3  | xargs readlink -e # 
the question mark should be replaced with the right pattern - this is almost right
# this is probably the best solution remove the grep part if you dont need a filter
find <dirname> | grep .mkv | xargs readlink -e |  xargs ls --color=auto # only matroska files in the dir and subdirs with Nice color - also you can edit ls flags
find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | grep .mkv 
find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | xargs grep -R  '--include=*.'{mkv,mp4} . | cut -d ' ' -f3 # I am sure you can do more with grep 
readlink -f `ls` # in the directory or 

0
omen23 5