ディレクトリ内のすべてのファイルの絶対パスを含むファイル(できれば.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 tree
sudo zypper install tree
brew install tree
Macで
過去の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