我有一个包含图像(png、bmp、jpg)和无扩展名文件的文件夹。
我不知道如何仅移动无扩展名的文件。它们都是随机编号的文件。
答案1
用bash
shopt -s extglob
mv -- !(*.jpg|*.png|*.bmp) targetdir/
答案2
使用!(...)
ksh 扩展 glob 运算符进行求反,因此在ksh
, zsh -o kshglob
or 中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