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 {} \;

相关内容