我尝试使用包含以下内容的 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 1
make find 仅在当前目录中寻找目标(默认情况下搜索的起点是当前目录)。
查看查找手册页以获得更多选项以及您可以定位的不同文件类型。
答案2
我已经实施了以下快速解决方法:
#!/bin/bash
mv * build_files/ 2> /dev/null
mv build_files/*.log ./ && mv build_files/*.imx ./ && mv build_files/*.sh ./
我知道这涉及多次迭代,但这不是必需的,而且我愿意进行改进。