移动命令在 Bash 脚本中不起作用

移动命令在 Bash 脚本中不起作用

我尝试使用包含以下内容的 bash 脚本将除少数项目之外的所有内容移动到文件夹中。我首先在终端中尝试了这些命令并获得了预期的结果,但将它们放入脚本中会产生下面提到的错误。

#! /bin/bash
shopt -s extglob
mv !(*.log | *.img) $1/build_files/ 2> /dev/null

错误:

build.sh: line 36: syntax error near unexpected token `(' 
build.sh: line 36: `    mv !(*.log|*.img) $1/build_files/ 2> /dev/null'

如果有人能解决这个问题,那将非常有帮助。提前致谢。

答案1

您可以使用 find 来做到这一点:

find -maxdepth 1 -type f ! \( -name '*.img' -o -name '*.log' \) -exec mv {} $1/build_files/ \;

该参数-type f使 find 仅查找常规文件。如果要匹配任何类型的文件,则必须将其删除。

参数-maxdepth 1make find 仅在当前目录中寻找目标(默认情况下搜索的起点是当前目录)。

查看查找手册页以获得更多选项以及您可以定位的不同文件类型。

答案2

我已经实施了以下快速解决方法:

#!/bin/bash
mv * build_files/ 2> /dev/null
mv build_files/*.log ./ && mv build_files/*.imx ./ && mv build_files/*.sh ./

我知道这涉及多次迭代,但这不是必需的,而且我愿意进行改进。

相关内容