ディレクトリ内のすべてのファイルの絶対パスを含むファイル(できれば.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でこれを達成できますか?
ls -d "$PWD"/* > listOfFiles.list
検索を使用できます。通常のファイルのみが必要だとすると、次のことができます。
find /path/to/dir -type f > listOfFiles.list
他のタイプのファイルが必要な場合は、必要に応じてタイプパラメータを調整できます。
次のことに注意してください。
ls -d "$PWD"/* > listOfFiles.list
ディレクトリ内の(非表示ではない)ファイルのリストを計算し、そのリストをls
に渡すのはシェルです。 ls
はそのリストをここに出力するだけなので、次のようにすることもできます。
printf '%s\n' "$PWD"/*
通常のファイルのみを表示するには-
find "$PWD" -type f > output
tree
のもう1つの方法は、ここでは言及されていませんが、再帰的に実行され、findやlsとは異なり、エラーは発生しません(例:Permission denied
、Not 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
過去の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