ディレクトリ内のすべてのファイルの絶対パスを含むファイル(できれば.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でこれを達成するにはどうすればよいですか?
ディレクトリ内のすべてのファイルの絶対パスを含むファイル(できれば.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
ls -d -1 $PWD/*
-1オプションは、行ごとに1つのファイル名を取得することを保証します
ls出力がファイルまたは端末に対するものかどうかを検出します。
find答えは、リストするファイルの数に関係なく失敗しないため、より良いソリューションです。
findを使用できます。通常のファイルのみが必要であると仮定すると、次のことができます。
find /path/to/dir -type f > listOfFiles.list
他の種類のファイルが必要な場合は、必要に応じてtypeパラメーターを調整できます。
ls。これfindはサブディレクトリを再帰します。非再帰の場合、引数の-maxdepth 1前に追加する必要があり-typeます。
次のことに注意してください。
ls -d "$PWD"/* > listOfFiles.list
ディレクトリ内の(隠されていない)ファイルのリストを計算し、そのリストをに渡すのはシェルですls。lsここにリストを印刷するだけなので、次のこともできます。
printf '%s\n' "$PWD"/*
printf数千のファイルがある場合に「コマンドラインが長すぎます」というエラーが発生しないというボーナスが追加さprintfれます。
printfビルトインされていないシェル、pdkshおよびその派生物の一部またはBourneシェルのほとんどのバージョンを除きます。1つの欠点ls -dは、隠されていないファイルが存在しない場合に印刷され/path/to/*、ls代わりにそのファイルが存在しないというエラーが表示されることです。
別の方法tree:ここで言及されていないが、それはあなたが(のようなすべてのエラーを持っていない再帰的とは違っ検索や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で
sudo apt install tree上のUbuntuの @rogerdpack sudo yum install treesudo zypper install tree
brew install treeMacで
過去の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