コマンドラインを使用してファイルの絶対パスを返そうとします。この問題を解決する方法にはrealpath
、readpath -f
およびlocate
コマンドなど多くの方法があることを読んでいます。
これらのどれも私には効果がありません。以下のようにホームディレクトリにあり、下の複数のディレクトリからファイルを検索すると、最後にファイルが追加された現在のディレクトリのみが返されます。同様に、ホームディレクトリからファイルを検索し、現在のディレクトリとファイルを返します。
[seisemann@localhost ~]$ cd uno
[seisemann@localhost uno]$ ls
dos first
[seisemann@localhost uno]$ cd dos
[seisemann@localhost dos]$ ls
second
[seisemann@localhost dos]$ cd
[seisemann@localhost ~]$ realpath second
/home/seisemann/second
[seisemann@localhost ~]$
私の質問は、なぜこれが起こるのかです。これらのコマンドが期待どおりに機能しないのはなぜですか?
編集:存在する場合は、検索する必要があるファイルのパスを返すコマンドがあるかどうか疑問に思います。場合によっては、現在のPythonスクリプトでディレクトリを開き、ターミナルコマンドを実行してフォルダ内のファイルパスを取得しようとしています。半移植的である必要があるため、パスをハードコードしたくありませんでしたが、見つかったコマンドは期待どおりに機能しませんでした。
答え1
ファイルが存在しない場合実際のパスファイル名を現在のパスに追加するだけです。
cd /tmp
touch foo
mkdir empty
cd empty
realpath nothing_here
ln -s /tmp/foo nothing_here
realpath nothing_here
まず、印刷/tmp/empty/nothing_here
後にファイルが存在しないという結果が表示されます。ln
/tmp/foo
マニュアルページによると、これは正しいようです。
解決された絶対ファイル名を印刷します。最後のコンポーネントを除いて、すべて存在する必要があります。
したがって、realpathを使用して2番目のパスの実際のパスを見つけるには、有効なパスを使用する必要があります。ファイルを検索しません!
realpath ~/uno/dos/second
問題を解決しなければならない