目录中有 5 个文件
log.txt
abc.pdf
def.ppt
1CC
1DD
现在我想将没有扩展名的文件(即 1CC 和 1DD)移动到另一个目录(即树)。
无论何时我手动使用命令它都会起作用。
command :
shopt -s extglob
mv !(*.*) tree
但在 Bash 脚本中它显示错误脚本:
#/bin/bash
mkdir tree
shopt -s extglob
mv !(*.*) tree/
运行后保存为stuct.sh
它显示以下错误:
struc.sh: line 11: syntax error near unexpected token `('
struc.sh: line 11: `mv !(*.*) tree/'
我不知道为什么会发生这种情况。请提供解决方案。谢谢
答案1
这是因为你正在使用特殊字符在您的脚本中。您必须将其转义。
你可以更好地利用find
这一点:
find . -maxdepth 1 -type f ! -name "*.*" -exec mv -t ./tree/ {} \+
此命令将:
find
搜索.
在当前目录中-maxdepth 1
深度为 1(因此没有子目录)type -f
仅限文件! -name "*.*"
文件名不匹配*.*
-exec mv -t ./tree/ {} \+
执行mv
命令,-t
参数指定目标目录(tree
在当前目录中(.
))并将\+
文件名({}
)附加到其中。
这将在您的 bash 脚本中起作用,并且它不会尝试将目录或您自己的tree
目录移动到其自身(您的mv
命令将尝试)。