bash 腳本中檔案路徑中的變數

bash 腳本中檔案路徑中的變數

我有一個文件,其中包含大約 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的結果。findfind-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 {} \;

相關內容