Bashスクリプトのファイルパス変数

Bashスクリプトのファイルパス変数

約20,000個の文字列を含むファイルがあります。このファイルの各文字列は、bashスクリプトのコマンドの引数でなければなりません。

まず、私のスクリプトは文字列を含むファイルを生成します。

find /home/alotoffolders -type f -name  "*.mp4" | grep some_greps > ~/tests/find_smth

変数を設定しようとすると、パラメータの一部になります。

filename=$(cut -d/ -f11 ~/tests/find_smth)

その後、すべてのファイルを1行ずつ読み、各文字列を入力パラメータとして使用しようとしましたが(動作しているようです)、出力にはいくつかの問題があります。

  for i in `cat ~/tests/find_smth`; do ./other_script -input $i -output /home/folder1/folder2/$filename; done

スクリプトは$ filenameより前の静的パスを見ることはできません。

何が問題なの?

答え1

  • 使用しないでください for i in $(cat ...) ...または同様です。行ではなく単語を繰り返します。可能であっても、ファイル名に改行文字を含めることができます。
  • 使用シェルパラメータ拡張または、ファイル名を取得するbasename代わりにコマンドを発行してくださいcut
  • grep結果を使用する代わりに、たとえばorオプションを使用できます。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 {} \;

関連情報