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