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.
Sie können verwenden
ls -lrt -d -1 $PWD/{*,.*}
Es werden auch versteckte Dateien abgefangen.
Sie können dies versuchen:
ls -d $PWD/*
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
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
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
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.
Das hat für mich funktioniert:
ls -rt -d -1 $PWD/{*,.*}
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.
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`/{})
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