ディレクトリ名の間に違いはありますか?
mydirectory
そして
mydirectory/
ls
特定のディレクトリで実行すると、これが発生することがわかりました。一部のディレクトリ名にはスラッシュがあり、一部にはスラッシュがありません。ディレクトリに含まれているファイルにアクセスするには、最後にスラッシュを追加する必要があるため、問題が発生します。
vi $mydirectory"/"$myfile
それとも、
vi $mydirectory$myfile
答え1
それがない/
ファイルかもしれません。
場合によっては致命的である可能性があります。たとえば、次を使用する場合mv
:
mv file1 mydirectory
mv file2 mydirectory
mv file3 mydirectory
いいですか?ただし、mydirectory
存在しない場合、またはディレクトリではない場合、最終結果はでなくなり、名前は次のようになりfile1
ますfile2
。file3
mydirectory
mv file1 mydirectory/
mv file2 mydirectory/
mv file3 mydirectory/
存在しない場合は、mydirectory
3つのエラーメッセージのみが表示され、file1
残りますfile2
。file3
これは/
いくつかのあいまいさを排除します。
それ以外には特にルールはありません。一部のプログラムは、/
最後に提供されたかどうかによって異なる動作をする場合があります。何をすべきかはそれらに依存します。
場合によっては、多すぎると問題が発生する可能性があります/
。たとえば、出力にfind
残りの部分を保持するので/
、このような比較ではなく単純な文字列比較を使用してファイル/パス名を検索しようとすると間違っている可能性がありますrealpath
。
答え2
これは「表示」ですls
。つまり、これを行うか、ls -p
ディレクトリls -F
の背後にスラッシュを一貫して追加する必要があります。本質的に、ファイルが何であると思うかについての視覚的な手がかりを追加します。 (シンボリックリンク、実行権限を持つファイル、名前付きパイプ、ソケットなどに-F
接続されていることに注意してください。)vsを使用して再現することもできます。@
*
|
=
ls -d directory/
ls -d directory
/
私は\0
これが無効なファイル/ディレクトリ名の唯一の2文字であると思います。
常にスラッシュを追加することは安全でなければならず、mydirectoryとmyfileを正しく割り当てると期待どおりvim "$mydirectory/$myfile"
に機能するはずです。 (警告$mydirectory
と$myfile
正しく割り当てられている)とfoo/bar
同じfoo//bar
でなければなりません。
通常、私はlsの出力を変数に割り当てて処理するのが好きではありません。主に、以前はファイル名の文字と欠落している引用符が最終的に破壊的な結果になったためです。 (つまり、prefix=/home user=" oops" rm -rf $prefix$user
最終的に再帰的に削除/home
してから再帰的に削除しようとします./oops
。)
私はlsを使用しませんが、bashやfind -print0 | xargs -0
。ls
ls
答え3
「クールなファイル名」という文脈でディレクトリやフォルダを考えると、フォルダはまだファイルですが、フォルダはファイルキャビネットのフォルダのようにコンテナを指すポインタに近いです。スラッシュ「/」またはスラッシュポイント「/」を使用してください。スクリプトの場合は、フォルダー以外のファイルを参照していないことを知って確認するのが役立ちます。
これが意味があることを願っています。