約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オプションを使用できます。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 {} \;