web-dev-qa-db-ja.com

Linuxでlsコマンドを使用してフルパスでファイルをリストする

多くの人がこれが繰り返し質問していることに気付くでしょうが、このトピックについて尋ねられる前に私はすべての質問を経験しましたが、私にとってはうまくいきませんでした。

これまでのところ、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」内のファイルが見つからないため、マシンのルートディレクトリファイルが印刷されます。

36
Prakash.DTI

使用できます

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

また、隠しファイルもキャッチします。

46
Totoro

これを試すことができます:

ls -d $PWD/*
35
mgigirey

すべてをフルパスでリストするには、現在のディレクトリのみ

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

以下を簡単に使用して、ファイルのみをリストできます。

ls -d -1 $PWD/*.*

ディレクトリをリストするには、次のようにします。

ls -d -1 $PWD/**

すべてをリストするには、次のようにします(files/dirs):

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

より役立つオプション:

-d内容ではなくディレクトリを一覧表示します

-R再帰的

-1行ごとに1つのファイルをリストする

-l長いリスト形式を使用

-aで始まるエントリを含むすべてをリストします。そして..

-暗黙のリストを除くすべてをリストします。そして..

詳細については、次を入力してください

ls --help 
5

これにより、現在のディレクトリからすべてのファイルが再帰的に印刷されます。

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
3
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