移动没有扩展名的文件

移动没有扩展名的文件

目录中有 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命令将尝试)。

相关内容