非常に簡単な作業でなければならないように見えますが、私は十分にやっておらず、フォーラムで何も見つからないようで、簡単なことを見落としているようです。
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'"
列にはまだ一重引用符があります。したがって、そうであれば、$1
5dog
つの文字列を一致させることです'dog'
。
一致するファイルを探している場合は、*.py
スクリプトが正しく設定されていますが、$1
次の式を使用したいと思います。
find . -name "$1" -print0