讓“find”在 shell 腳本中工作

讓“find”在 shell 腳本中工作

我猜我忽略了一些簡單的事情,因為這看起來應該是一個非常簡單的任務,但我做得不夠,似乎在論壇上找不到任何東西。

我試圖find從 shell 腳本中運行,但它什麼也沒做。

例如,我有一個資料夾,其中包含一些文件和幾個包含文件的子目錄:

$ 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),但我似乎無法弄清楚為什麼完全相同的命令可以在命令列中工作,但不能在shell 腳本中工作:

$ 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"'。因為您使用單引號,所以該字串是四個字元的文字,雙引號美元第一雙引號

但是,即使交換雙引號和單引號,-name "'$1'"字串中仍然會有單引號。因此,如果$1是,dog您將嘗試匹配五個字串'dog'

如果您正在尋找匹配的文件*.py,那麼您的腳本設定正確$1,但您想使用這樣的表達式

find . -name "$1" -print0

相關內容