我有一个文件,其中包含大约 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 {} \;