如何配置find命令以在Linux shell脚本中运行?

Jak*_*ers -2 linux bash shell find

我试图在Linux shell脚本中运行以下find命令.当我在终端中运行该命令时,它成功找到具有.mp4指定文件夹扩展名的所有文件,并将它们复制到临时文件夹.

find /datadrive/reports/ -name \*.mp4 -exec cp {} 
/datadrive/reports/video_tmp/ \;
Run Code Online (Sandbox Code Playgroud)

但是,当我在我的运行中 file_mover.sh

码:

SHELL=/bin/bash
PATH=~/find /datadrive/reports/ -name '\*.mp4' -exec cp {} 
/datadrive/reports/video_tmp/ \;
done
MAILTO=root
Run Code Online (Sandbox Code Playgroud)

输出:

./file_mover.sh: line 2: /datadrive/reports/: Is a directory.
Run Code Online (Sandbox Code Playgroud)

我想我在脚本的某个地方缺少语法,任何帮助都会受到赞赏.

Cha*_*ffy 6

以下是一个完全有效的脚本:

#!/bin/sh
find /datadrive/reports/ -name '*.mp4' -exec cp -t /datadrive/reports/video_tmp/ '{}' +
Run Code Online (Sandbox Code Playgroud)

请注意更改:

  • 我们不是要分配给PATH.这是一个具有特殊含义的变量(它决定了程序的位置),因此重新分配它通常会使事情变得混乱.
  • 我们没有在单引号内使用反斜杠.-name \*.mp4是合法的匹配所有以.mp4.结尾的文件.-name '*.mp4'为同一目的是合法的.你不能将两者结合起来,让它仍然意味着你想要的.
  • 通过使用cp -t dest source1 source2 ...,我们允许find仅运行cp将目标文件名放在命令行上所需的最短次数.

分配SHELL和分配也没有意义MAILTO; 它们在crontab(以及其他一些特定/狭窄的环境)中有意义,但不适用于通用脚本.