首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >移动除一个文件外的所有文件

移动除一个文件外的所有文件
EN

Stack Overflow用户
提问于 2009-03-22 02:44:38
回答 14查看 186.2K关注 0票数 183

如何移动除一个文件以外的所有文件?我正在寻找类似这样的东西:

代码语言:javascript
复制
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'

在那里我将旧的东西移动到除了Tux.png之外的新东西-folder。!-sign表示否定。有没有什么工具可以做这项工作?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-04-25 14:26:54

将以下内容放入您的.bashrc

代码语言:javascript
复制
shopt -s extglob

它扩展了正则表达式。然后,您可以通过以下方式移动所有文件:

代码语言:javascript
复制
mv !(fileOne) ~/path/newFolder

与其他命令相关的异常

请注意,在复制目录时,不能在线程Why extglob except breaking except condition?中注意到的名称中使用前向闪存

代码语言:javascript
复制
cp -r !(Backups.backupdb) /home/masi/Documents/

因此,在否定之前,Backups.backupdb/是错误的,我也不会在移动目录时使用它,因为在其他命令和可能的其他异常中,可能会错误地使用globs。

票数 111
EN

Stack Overflow用户

发布于 2009-03-22 02:53:55

如果您使用bash并设置了extglob外壳选项(通常是这种情况):

代码语言:javascript
复制
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
票数 164
EN

Stack Overflow用户

发布于 2009-03-22 04:06:20

我会使用传统的find & xargs方法:

代码语言:javascript
复制
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的一个扩展。对于没有它的系统

代码语言:javascript
复制
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
    -exec mv '{}' ~/Linux/New \;
票数 76
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/670460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档