多くの人がこれが繰り返し質問していることに気付くでしょうが、このトピックについて尋ねられる前に私はすべての質問を経験しましたが、私にとってはうまくいきませんでした。
これまでのところ、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
これにより、ルートdiractoryおよびsubdiratoryのすべてのファイルが出力されます。
出力:
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」内のファイルが見つからないため、マシンのルートディレクトリファイルが印刷されます。
使用できます
ls -lrt -d -1 $PWD/{*,.*}
また、隠しファイルもキャッチします。
これを試すことができます:
ls -d $PWD/*
すべてをフルパスでリストするには、現在のディレクトリのみ
find $PWD -maxdepth 1
上記と同じですが、大文字と小文字を区別しない特定の拡張子のみに一致します(この場合は.shファイル)
find $PWD -maxdepth 1 -iregex '.+\.sh'
$ PWDは現在のディレクトリ用で、任意のディレクトリに置き換えることができます
mydir="/etc/sudoers.d/" ; find $mydir -maxdepth 1
maxdepth
は、findがサブディレクトリに入らないようにします。たとえば、子のアイテムをリストするために「2」に設定できます。再帰的に必要な場合は、単に削除してください。
ファイルのみに制限するには、-type f
オプションを使用できます。
find $PWD -maxdepth 1 -type f
以下を簡単に使用して、ファイルのみをリストできます。
ls -d -1 $PWD/*.*
ディレクトリをリストするには、次のようにします。
ls -d -1 $PWD/**
すべてをリストするには、次のようにします(files/dirs):
ls -d -1 $PWD/**/*
より役立つオプション:
-d内容ではなくディレクトリを一覧表示します
-R再帰的
-1行ごとに1つのファイルをリストする
-l長いリスト形式を使用
-aで始まるエントリを含むすべてをリストします。そして..
-暗黙のリストを除くすべてをリストします。そして..
詳細については、次を入力してください
ls --help
これにより、現在のディレクトリからすべてのファイルが再帰的に印刷されます。
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
私はこの問題を抱えていて、次を使用します:
ls -dl $ PWD/* | grep $ PWD
それは私が常に望んでいたリストを持っていますが、あなたの走行距離は異なる場合があります。
これは私のために働いた:
ls -rt -d -1 $PWD/{*,.*}
ls
コマンドは、ディレクトリ内のファイルの名前のみを出力します。次のようなことをしない
print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/" + i)
これにより、ディレクトリがファイル名とともに出力されます。
それを行うには複数の方法がありますが、最も簡単だと思います:
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`/{})
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