Macターミナルの「find」コマンド:結果の出力での二重スラッシュはどういう意味ですか?


9

大きなネストされたディレクトリ構造を検索するには、find-commandを使用します。

結果出力には、ダブルスラッシュ(//)が含まれる場合があります。

例(「ダウンロード」の後):

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

私はそれが現在の作業ディレクトリをマークするだろうと最初に思った。しかし、そうではありません。

このダブルスラッシュの意味は何ですか?

通常、結果をクリップボードにコピーし、ファインダーに切り替えます。次に、「shift」+「command」+「g」で、パスを(ファイルまで)ボックスに貼り付けます。含まれているディレクトリが開かれるようにします。

正常に動作します。しかし、ダブルスラッシュは手動で削除する必要があります。

したがって、どうすれば回避できますか?


2
ダブルスラッシュを削除する必要がないことに注意してください。二重スラッシュは、パスの最初と、スラッシュが2つだけの場合にのみ特別です。中央または末尾に複数のスラッシュがあるか、最初の2つよりも多くのスラッシュは、1つのスラッシュとまったく同じです。これはPOSIX / SUS仕様で保証されています。
イェルクWミッターク

回答:


17

findかなり文字通りです。「〜/ Downloads /」内を検索するように指示すると、検索結果のプレフィックスとしてそれ(末尾のスラッシュを含む)が使用されます。指定したパスの最後に不要で無関係なスラッシュがあるため、出力に不要で無関係な余分なスラッシュが発生します。

解決策:検索ディレクトリから末尾の「/」を削除します。

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf

4

このダブルスラッシュの意味は何ですか?

奇妙な古いBSD findを使用していることを意味します。

どうすれば回避できますか?

元のコマンドの末尾のスラッシュは確かに省略できますが、タブ補完によって自動的に追加されるため(できる限り多く使用する必要があります)、また、末尾のスラッシュは実際に他の多くの場所で使用されているためファイル名ではなくディレクトリを扱っているので、省略すると直感に反し、ばかげています。

代わりに、次のいずれかを行うことをお勧めします。

a)sedへのパイプを見つけるためのラッパーを作成します。sed 's @ // @ / @'

b)GNUのfindutilsを「brew install findutils」でインストールしてから、「gfind」を直接使用するか、「find」を「gfind」にエイリアスするか、/ usr / local / opt / findutils / libexec / gnubinをパスに追加します(これにより、 GNU findutils '' locate '、' updatedb '、&' xargs ')。

c)最初はこの問題(そして他の何千も)がなかったはずの適切なGNU / Linux OSに切り替えます。:p


1
に追加set mark-directories offするだけです。inputrcそして、あなたは行ってもいいです。それらの古いBSDの人の1人から。
fd0

@ fd0を使用すると、ディレクトリと同じ名前のファイルを区別できなくなります。それはBSDの発見であり、bashやreadlineではなく、これは少し厄介です
Jan Kyu Peblik 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.