it-swarm.com.de

Listet die Datei mit dem Befehl ls in Linux mit vollständigem Pfad auf

Viele werden feststellen, dass dies Fragen wiederholt, aber ich habe alle Fragen durchgegangen, die zuvor zu diesem Thema gestellt wurden, aber keine hat für mich funktioniert.

Ich möchte den vollständigen Pfadnamen des bestimmten Dateiformats mit dem Befehl ls drucken. Bisher habe ich einen Code-Code gefunden, der alle Dateien im Verzeichnis druckt, jedoch nicht den vollständigen Pfad.

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

dadurch wird die gesamte Datei im Hauptverzeichnis und im Unterverzeichnis ausgedruckt.

Ausgabe:

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

Ich möchte eine Ausgabe wie:

  /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: Ich habe dies alles verwendet, aber es funktioniert nicht mit meinem Code in LUA.

wenn ich mit meinem Code verwende, wird ein falsches Verzeichnis angezeigt

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

findet keine Dateien in "/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7", da die Dateien im Stammverzeichnis des Computers gedruckt werden.

28
Prakash.DTI

Sie können verwenden 

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

Es werden auch versteckte Dateien abgefangen.

35
Totoro

Sie können dies versuchen:

ls -d $PWD/*
27
mgigirey

Um alles mit vollem Pfad aufzulisten, nur im aktuellen Verzeichnis

find $PWD -maxdepth 1

Wie oben, entspricht jedoch nur einer bestimmten Erweiterung, ohne Berücksichtigung der Groß- und Kleinschreibung (in diesem Fall .sh-Dateien).

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

$ PWD ist für das aktuelle Verzeichnis, es kann durch ein beliebiges Verzeichnis ersetzt werden

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

maxdepth verhindert, dass find in Unterverzeichnisse geht. Sie können es beispielsweise auf "2" setzen, um auch Elemente in untergeordneten Elementen aufzulisten. Entfernen Sie es einfach, wenn Sie es rekursiv benötigen.

Um es auf nur Dateien zu beschränken, können Sie die Option -type f verwenden.

find $PWD -maxdepth 1 -type f
12
sdkks

Sie können einfach Folgendes verwenden, um nur Dateien aufzulisten:

ls -d -1 $PWD/*.*

folgendes zum Auflisten der Verzeichnisse:

ls -d -1 $PWD/**

um alles (files/dirs) aufzulisten:

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

Weitere hilfreiche Optionen:

-d listet Verzeichnisse nicht ihren Inhalt auf

-R rekursiv 

-1 Liste eine Datei pro Zeile 

-l verwendet langes Auflistungsformat

-eine Liste aller Einträge, die mit beginnen. und ..

-Liste alle, aber nicht impliziert. und ..

für weitere Informationen geben Sie einfach Folgendes ein 

ls --help 
4
msoliman

Dies druckt alle Dateien rekursiv aus dem aktuellen Verzeichnis.

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

Ich hatte dieses Problem und verwende Folgendes:

ls -dl $ PWD/* | grep $ PWD

Es hat mir immer das gewünschte Angebot gebracht, aber Ihre Laufleistung kann variieren.

0
Bruce Staples

Das hat für mich funktioniert:

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

Der Befehl ls gibt nur den Namen der Datei im Verzeichnis aus. Warum nicht so etwas tun?

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

Dadurch wird das Verzeichnis mit dem Dateinamen ausgedruckt.

0
Leland Barton

Es gibt mehr als einen Weg, dies zu tun, die einfachste, die ich für möglich halte:

find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7

auch das sollte funktionieren:

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

sie möchten nur den vollständigen Pfad, warum nicht das Dienstprogramm verwenden, das dafür gedacht ist. Eine Kombination aus readlink und grep sollte Ihnen das geben, was Sie möchten

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