在文件夹中查找除某些特定文件夹之外的文件/文件夹

在文件夹中查找除某些特定文件夹之外的文件/文件夹

我正在尝试将所有文​​件从一个文件夹移动到另一个文件夹,除了一些特定的文件夹。

我尝试通过以下方式移动除.gitassetsbuild文件夹之外的所有文件:

find .. ! -regex '\(.git\|assets\|build\)' | xargs mv -t ../build

我期望这个命令能做什么:

  • 查找父文件夹中所有非 .git、assets 或 build 的文件/文件夹。
  • 将这些文件/文件夹移动到 ../build

文件夹结构如下:

.
├── application
├── assets
├── build
├── download_files
├── images
├── mybb
├── system
└── tools

我的工作目录是工具文件夹。

如果我执行find .. ! -regex '\(.git\|assets\|build\)'它仍然显示.gitassets并构建。

我的命令有什么问题?

答案1

您可能漏掉了一些通配符,请尝试

find .. ! -regex '\(.*\/\.git.*\|.*\/assets.*\|.*\/build.*\)'

我还添加了路径分隔符 (/),以便作为路径一部分出现的资产或构建不匹配。

答案2

您还可以使用 bash 的扩展 glob 来过滤这些目录。首先确保已启用 extglob。

shopt -s extglob

然后

mv ../!(assets|build) ../build

glob 不会匹配以 开头的文件.,因此无需过滤掉.git。但是,如果您想移动以 开头的其他文件.,则还需要启用 dotglob shell 选项。

shopt -s extglob dotglob
mv ../!(.git|assets|build) ../build

相关内容