シェルスクリプトで `find` ジョブを作成する

シェルスクリプトで `find` ジョブを作成する

非常に簡単な作業でなければならないように見えますが、私は十分にやっておらず、フォーラムで何も見つからないようで、簡単なことを見落としているようです。

find私はシェルスクリプトで実行してみましたが、何もしませんでした。

たとえば、いくつかのファイルを含むフォルダと、そのファイルを含むいくつかのサブディレクトリがあります。

$ ls *
afile1.txt  anotherfile.py  findit.sh

subdir1:
morefiles1.txt  morefiles2.txt  morefiles3.txt  somescript.py

subdir2:
evenmorefiles1.txt  evenmorefiles2.py  evenmorefiles2.sh

findを使用して、指定された検索文字列ですべてのファイル名を抽出し(最終的にパイプで接続xargs)、まったく同じコマンドがコマンドラインでは機能しますが、シェルスクリプトでは機能しない理由がわからないようです。

$ cat findit.sh 
#!/bin/bash
echo $(which find)
echo "find . -name '"$1"' -print0"
find . -name '"$1"' -print0
echo "nothin??"
$ . findit.sh '*py'
/usr/bin/find
find . -name '*py' -print0
nothin??
$ find . -name '*py' -print0
./anotherfile.py./subdir2/evenmorefiles2.py./subdir1/somescript.py

これを助けてくれてありがとう。

答え1

二重引用符で引用しました-name '"$1"'。一重引用符を使用するため、文字列は4文字リテラルです。二重引用符ドル最初の二重引用符

ただし、二重引用符と一重引用符を置き換えても、文字-name "'$1'"列にはまだ一重引用符があります。したがって、そうであれば、$15dogつの文字列を一致させることです'dog'

一致するファイルを探している場合は、*.pyスクリプトが正しく設定されていますが、$1次の式を使用したいと思います。

find . -name "$1" -print0

関連情報