(bash 上有很多关于此问题的信息,但 zsh 上的信息少得多,而且对于两个或更多文件则根本没有信息。不知道如何将^
(“插入符号”)应用于多个文件)。
我想知道(见下面的文件),如何将mv
所有文件移动到/test-folder
,除了两个文件:a1
和a2
。
我没有找到任何明确的语法(除了 bash [看起来用!(a1|a2)
,会很容易])来对两个或更多文件执行此操作。
相当于.zsh
看起来!
是(“插入符号”)。我可以用一个取得一些成功,但我找不到将应用于两个或更多的^
方法。^
- 我发现了很多与 bash shell 相关的内容:(
shopt -s extglob
例如mv !(fileOne) ~/path/newFolder
:) - 我发现与 zsh shell 相关的较少:(
setopt extendedglob
例如mv A/^(file|directory)(|2)(D) B/
:) - 还有其他带有
find ... -exec ...
和其他带有 的方法xargs
,其作者表示为“经典方法”)。
将所有文件移动到/test-folder
,除a1
和 之外a2
:
~/linux_experiments/MV_CP_ETC$ ls -lrt
total 4
-rw-r--r-- 1 kali kali 0 Mar 24 15:45 a1
-rw-r--r-- 1 kali kali 0 Mar 24 15:45 a2
-rw-r--r-- 1 kali kali 0 Mar 24 15:45 a3
-rw-r--r-- 1 kali kali 0 Mar 24 15:45 a4
-rw-r--r-- 1 kali kali 0 Mar 24 15:45 a5
drwxr-xr-x 2 kali kali 4096 Mar 24 16:17 test-folder
这是我能走的全部距离:
$ ls
a1 a2 a3 a4 a5 test-folder
$ mv ./^a1 test-folder
mv: cannot move './test-folder' to a subdirectory of itself, 'test-folder/test-folder'
$ ls -lrt
total 4
-rw-r--r-- 1 kali kali 0 Mar 24 15:45 a1
drwxr-xr-x 2 kali kali 4096 Mar 24 15:56 test-folder
$ cd test-folder
$ ls
a2 a3 a4 a5
答案1
您可以使用“非”运算符:
setopt extendedglob
mv ^a[12] testfolder
mv ^a<1-2> testfolder
mv ^(a1|a2) testfolder
或者,也可以使用“但非”运算符:
setopt extendedglob
mv *~a[12] testfolder
mv *~a<1-2> testfolder
mv *~(a1|a2) testfolder
(<x-y>
匹配 x 和 y 之间的任意数字(含)。)
看https://zsh.sourceforge.io/Doc/Release/Expansion.html#Filename-Generation
有趣的事实:将它们组合起来~^
会得到一个“与”运算符。:)