
我有一個文件,其中包含大約 20k 字串。該檔案中的每個字串都應該是 bash 腳本中命令的參數。
首先,我的腳本會產生一個包含該字串的檔案。
find /home/alotoffolders -type f -name "*.mp4" | grep some_greps > ~/tests/find_smth
在嘗試設定一個變數之後,它將成為參數的一部分
filename=$(cut -d/ -f11 ~/tests/find_smth)
然後我嘗試逐行讀取所有文件並使用每個字串作為輸入參數(似乎有效),但對於輸出 - 存在一些問題。
for i in `cat ~/tests/find_smth`; do ./other_script -input $i -output /home/folder1/folder2/$filename; done
腳本無法看到 $filename 之前的靜態路徑。
哪裡有問題?
答案1
- 切勿使用
for i in $(cat ...) ...
或類似的。它循環遍歷單字,而不是行。即使可以,檔案名稱也允許包含換行符號。 - 使用shell參數擴展或
basename
命令而不是cut
取得檔案名稱。 - 您可以使用 eg的or選項,而不是使用
grep
的結果。find
find
-regex
-iregex
find -exec
與以下一起使用sh -c
:
find /home/alotoffolders -type f -iregex 'some_pattern.mp4' \
-exec sh -c '
/path/to/other_script -input "$1" -output "/home/folder1/folder2/${1##*/}"
' find-sh {} \;