如何移动除一个以外的所有文件?我正在寻找类似的东西:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
我将旧资料移到新资料夹的位置,除了Tux.png
。!符号表示否定。有一些工作工具吗?
如何移动除一个以外的所有文件?我正在寻找类似的东西:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
我将旧资料移到新资料夹的位置,除了Tux.png
。!符号表示否定。有一些工作工具吗?
Answers:
如果您使用bash并设置了extglob
shell选项(通常是这种情况):
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
将以下内容放入您的.bashrc
shopt -s extglob
它扩展了正则表达式。然后,您可以移动除一个以外的所有文件
mv !(fileOne) ~/path/newFolder
请注意,在复制目录中,不能以线程中注意到的名称使用前向闪存。:
cp -r !(Backups.backupdb) /home/masi/Documents/
因此Backups.backupdb/
在否定之前这里是错误的,并且我不会在移动目录中使用它,因为存在将错误的glob与其他命令一起使用以及可能出现其他异常的风险。
mv !(arc*) archive_190629b
我会使用传统的find&xargs方法:
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 |
xargs -0 mv -t ~/Linux/New
-maxdepth 1
使其无法递归搜索。如果您只关心文件,则可以说-type f
。-mindepth 1
使其不将~/Linux/Old
路径本身包括到结果中。适用于任何文件名,包括包含嵌入式换行符的文件名。
有一条评论指出,mv -t
选项可能是GNU扩展。对于没有它的系统
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
-exec mv '{}' ~/Linux/New \;
我认为最简单的方法是反引号
mv `ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/
编辑:
请使用反斜杠与ls一起使用,以防止将其与别名一起使用,即,大多数ls被别名为ls --color。
mv `\ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/
谢谢@Arnold Roa
grep -v
吗?
我发现这样做对于排除某些文件或目录的简单移动会更安全,更容易依靠。
ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET
-l
选项ls
将在命令行上包含很多不相关的信息,并导致mv命令失败。
可以这样跳过grep:
ls ~/Linux/Old/ -QI Tux.png | xargs -I{} mv ~/Linux/Old/{} ~/Linux/New/
这可能更容易记住,并且对我有用。
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination