使用 mv 移动无扩展名文件

使用 mv 移动无扩展名文件

我有一个包含图像(png、bmp、jpg)和无扩展名文件的文件夹。

我不知道如何仅移动无扩展名的文件。它们都是随机编号的文件。

答案1

用bash

shopt -s extglob
mv -- !(*.jpg|*.png|*.bmp) targetdir/

答案2

使用!(...)ksh 扩展 glob 运算符进行求反,因此在ksh, zsh -o kshglobor 中bash -O extglob

rm -- !(*.*) /dest

将移动名称不包含点的文件(请注意,在除 之外的 shell 中zsh,如果没有这样的文件,它仍然可以移动名为的文件,!(*.*)即使该文件确实包含点)。

使用 的zsh扩展^全局运算符进行求反,因此在 中zsh -o extendedglob

rm -- ^*.* /dest

在上述所有内容中,隐藏文件不会被移动,首先是因为它们的名称确实包含点(它们以点开头),而且还因为隐藏文件被排除在 glob 之外,除非 glob 本身以文字 开头.

如果您还想移动.foo文件但不想移动文件.foo.png,您可以执行以下操作:

mv -- ^?*.*(D) /dest # with zsh -o extended-glob

mv -- !(?*.*) /dest # with bash -O extglob -O dotglob
                    # or   zsh -o kshglob -o dotglob -o nobareglobqual
                    # or   env FIGNORE='@(.|..)' ksh93

mv -- @(.|)+([^.]) /dest # with bash -O extglob or AT&T ksh

相关内容