* .swoを検索する


6

これは簡単なことだと思いますが、私は困惑しました。

以下を使用するとファイルが見つかります。

$ ls -al  .bash_*.sw*   
-rw-r--r--  1 damiensawyer  staff  12288 27 Nov 07:39 .bash_profile.swo

しかし、私がこれを使うとき、それはそれを見つけません。

$ ls -al *.sw*      
ls: *.sw*: No such file or directory

私は2番目のコマンドも戻ることを期待していました .bash_profile.swo。何が足りないの?

回答:


5

を使う ls

問題は、ファイルに2つのドットがあり、1つではないことです。それを説明する必要があります。

ls -al .*.sw*

これは、ドットで始まるすべてのファイルと一致します(目に見えないファイルは、 .DS_Store )そしてまたで終わる .sw*

.swa と同様 .swz 一致します。


を使う find

以下を使用して、同じ拡張子を持つすべてのファイルを見つけることができます( swo 以下の場合はディレクトリにあります。

find ~ -iname *swo

-iname 大文字と小文字を区別しない一致を検索します。


あなたはこれを使用してその/それらの特定のファイルを検索することができます:

find .bash_*.sw*

注:使用 ~ パスはホームディレクトリ全体を検索します。


ありがとうZach。私はfindを使うことを知っています。 lsがうまくいかないのには理由があるのでしょうか。それはlsの制限ですか?
Damien Sawyer

私は自分の答えを編集しました。 @DamienSawyer
Zach Gates

ああクール。それで、これからのテイクアウトは「星が時代と一致しない」であるべきですか?
Damien Sawyer

それ する ピリオドと一致しますが、最初のピリオド以降のすべてが一致する必要がある部分であると想定します。 sw*。 @DamienSawyer
Zach Gates

実際には、それが問題であるのは「2つのドット」ではなく、最初のドットが最初の文字であるという事実です。 Unixでは、これはファイルを隠すための規約です。 .sw これは「隠された」ファイルではないため、red.and.joe.are.sworn.enemiesと一致します。
Paul Wagland

6

これは実際には原因ではありません。 ls以来、 ls パターンを拡大することはありません。

グロブパターン(パターンを含むパターン)の拡張方法に関する決定 * そして ? )です シェル製 。あなたの殻はたぶん bash

デフォルトで bash 実行しない パス拡張 ドットファイルしかし、それは明示的に . (あなたがすでに発見したように)または dotglob オプション。 bashのマンページから:

ドットグロブ 設定されている場合、bashは `。 'で始まるファイル名を含みます。パス名展開の結果に。

説明するために、次のように展開を印刷しましょう。 echo の代わりに ls

$ touch .bash_profile.swo

$ echo .*.swo
.bash_profile.swo

$ echo *.swo
*.swo

$ shopt -s dotglob

$ echo *.swo
.bash_profile.swo

それ以上の議論は見つけることができます ここに


3

問題はそれです ls で始まるファイルのみを表示します。 . あなたは明示的に最初のものを持っている必要があります . ファイルglob内。

したがって、次のようになります。

ls .*swo

Unixシェルは以前にglobを拡張しています ls ファイル名を見ます。


ありがとうマーク。私は実際には-aを試しましたが、あなたの最初のサンプルがうまくいくようには見えません。先導期が必要だと思います。
Damien Sawyer

こんにちは、「最悪」の代わりに「最初の」という意味ですか?
Damien Sawyer

2

これらのパターン( *.sw* など)として知られている グロブ

@Markと@Zach Gatesが指摘したように、グロブは、明示的にピリオドを含めない限り、名前がピリオドで始まるファイルとは一致しません。 . パターンの先頭にこれは、UNIX系システム(OS Xなど)では、ドットで始まるファイルは「隠しファイル」と見なされ、通常はデフォルトでは表示されないためです。

グロブマッチングは実際にはシェルによって行われます( bash デフォルトでは、次のような個々のコマンドによるものではありません。 ls。 bashのマニュアルで説明されているように ファイル名の拡張

単語を分割した後... Bashは各単語の文字をスキャンします * '、' ? 、および [ 』これらの文字のいずれかが表示された場合、その単語はパターンと見なされ、パターンに一致するファイル名のアルファベット順に並べ替えられたリストに置き換えられます(パターンマッチングを参照)。一致するファイル名が見つからない場合、...その単語は変更されません。

パターンがファイル名の展開に使用されている場合、文字「 . 'ファイル名の先頭またはスラッシュの直後にある場合は、シェルオプションを除いて明示的に一致させる必要があります。 dotglob 設定されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.