web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルを絶対パスで一覧表示する方法

ディレクトリ内のすべてのファイルの絶対パスを含むファイル(できれば.listファイル)が必要です。

例dir1:file1.txt file2.txt file3.txt

listOfFiles.list

/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt

どうすればlinux/macでこれを達成できますか?

33
arabian_albert
ls -d "$PWD"/* > listOfFiles.list
32
Comforse

検索を使用できます。通常のファイルのみが必要だとすると、次のことができます。

find /path/to/dir -type f > listOfFiles.list

他のタイプのファイルが必要な場合は、必要に応じてタイプパラメータを調整できます。

35
Andy Dalton

次のことに注意してください。

ls -d "$PWD"/* > listOfFiles.list

ディレクトリ内の(非表示ではない)ファイルのリストを計算し、そのリストをlsに渡すのはシェルです。 lsはそのリストをここに出力するだけなので、次のようにすることもできます。

printf '%s\n' "$PWD"/*
13

通常のファイルのみを表示するには-

find "$PWD" -type f  > output
10
jai_s

treeのもう1つの方法は、ここでは言及されていませんが、再帰的に実行され、findやlsとは異なり、エラーは発生しません(例:Permission deniedNot a directory)ファイルをxargsまたはその他のコマンドにフィードする場合に備えて、絶対パスも取得します

tree -fai /pathYouWantToList >listOfFiles.list

オプションの意味:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.

treeをインストールするには:

Sudo apt install tree Ubuntu/Debianの場合

Sudo yum install tree CentOS/Fedora

Sudo zypper install tree OpenSUSE

3

realpath または readlink を使用できます。

ls | xargs realpath
  • xargs 標準入力からコマンドラインをビルドして実行します。
  • realpath :正規化された絶対パス名を返します
  • readlink :シンボリックリンクの値を読み取ります
3
Pablo A

過去のLinux環境では、相対パスを絶対パスにするなど、パスを標準化するresolveコマンドがありました。今は見つけられないので、おそらくその組織の誰かが書いたのかもしれません。

PythonまたはPerl標準ライブラリ(およびおそらく他の言語も))の関数を使用して、独自のスクリプトを作成できます。

resolve.py

#!/bin/env python

import sys
import os.path

for path in sys.argv:
    print os.path.abspath(path)

resolve.pl

#!/bin/env Perl

use warnings;
use Cwd qw ( abs_path );

foreach (@ARGV) {
    print abs_path($_), "\n";
}

次に、次の方法で問題を解決します。

resolve.py * > listOfFiles.list

このコマンドを使用すると、次のようなこともできます。

cd /root/dir1/dir2/dir3
resolve.py ../../dir4/foo.txt
# prints /root/dir1/dir4/foo.txt
2
jskroch