1

簡単な bash スクリプトを作成しようとしていますが、findコマンドに行き詰まっています。

と入力するとfind . zad*、次のような出力が得られます。

.
./lab2.sh~
./#zad2.sh#
./zad2.sh~
./zad1a.sh
./zad2.sh
./lab2.sh
./Azad2.sh~
./cdlinux.ftp.log
./Azad2.sh
./zad1a.sh~
./zad1.sh
./cdlinux.www.log
./zad1.sh~
zad1a.sh
zad1a.sh~
zad1.sh
zad1.sh~
zad2.sh
zad2.sh~

フォルダー内のすべてのファイルが (ファイル名の前に) リストされるのはなぜですか./。その後、適切な検索結果が得られます。./その出力を削除する方法はありますか? sed コマンドの使用は、すべての場合に機能するとは限りません (検索パスが とは異なる場合.)。

4

2 に答える 2

6

フラグを使用-nameして検索する名前を指定し、パターンを引用符で囲む必要があります。これにより、ワイルドカード*が に渡される前にbash が自動展開を実行しなくなりfindます。

 find . -name "zad*"

また、cwd パスを指定する必要はありません.

使用:

 find -name "zad*"

うまく動作するはずです=)

于 2012-10-27T14:26:01.573 に答える
2

まず、名前でファイルを検索するには、オプションを使用する必要があり-nameます。次に、パターンを引用符で囲む必要があります。

glob パターンが機能する方法は、コマンドが呼び出される前に*bash がパターンを展開することです。したがって、パターンに一致するすべてのファイルが find に与えられます。引用符がないと、次のようなコマンドを入力したかのようになります (現在のディレクトリにあるパターンに一致するファイルによって異なります)find . -name zad1.sh zad2.sh zad3.sh ...

これを防ぐには、パターンを一重引用符で囲みます。これにより、リテラル文字列zad*が引数として find コマンドに渡され、zad が検索した各ファイルに対してパターンを比較できるようになります。

例えば:

find . -name 'zad*'
于 2012-10-27T14:30:02.440 に答える