将所有的文件,除了一个将所有的文件,除了一个(Move all files except one)

2019-05-12 19:56发布

我如何才能将所有的文件,除了一个? 我在寻找的东西,如:

'mv ~/Linux/Old/!Tux.png ~/Linux/New/'

在那里我移动旧的东西到新的东西-folder除了Tux.png 。 !-sign表示否定。 有一些工具的工作吗?

Answer 1:

如果你使用bash,并有extglob外壳选项集(通常情况下):

mv ~/Linux/Old/!(Tux.png) ~/Linux/New/


Answer 2:

把下面给你的.bashrc

shopt -s extglob

它扩展正则表达式。 然后,您可以将所有的文件,除了一个接

mv !(fileOne) ~/path/newFolder

相对于其他命令异常

需要注意的是,在拷贝目录,正向闪光灯无法使用的名称作为注意到线程为什么extglob除了除了条件打破? :

cp -r !(Backups.backupdb) /home/masi/Documents/

所以Backups.backupdb/是否定之前错在这里,我不会在没有由于使用了错误的风险,移动目录,然后用其他的命令和其他可能的例外水珠使用它。



Answer 3:

我会去与传统的查找和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 \;


Answer 4:

一个快速的方法是修改文件名礼服让您的移动命令将不匹配。

例如:

mv Tux.png .Tux.png

mv * ~/somefolder

mv .Tux.png Tux.png


Answer 5:

我认为做的最简单的方法是用反引号

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罗亚



Answer 6:

对于bash, 某事的答案是正确的。 这里是zsh的 (我选择的外壳)语法:

mv ~/Linux/Old/^Tux.png ~/Linux/New/

需要EXTENDED_GLOB外壳选项进行设置。



Answer 7:

我觉得这是一个更加安全,更容易依靠简单的举动,排除某些文件或目录。

ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET


Answer 8:

以下不是100%保证方法,并且不应当在所有尝试的脚本。 但有些时候,它是快速交互的shell使用不够好。 一个文件的文件水珠像

[abc]*

(将匹配第一个,b或c的名字中的所有文件)可通过首先将“^”字符被否定的,即

[^abc]*

我有时会使用这个不匹配“的lost + found”目录下,例如像:

mv /mnt/usbdisk/[^l]* /home/user/stuff/.

当然,如果有开始l其他文件,我不得不事后处理这些。



Answer 9:

mv `find Linux/Old '!' -type d | fgrep -v Tux.png` Linux/New

find命令列出所有常规文件和fgrep一样命令过滤掉任何Tux.png。 该反引号告诉mV到移动所产生的文件列表。



Answer 10:

ls ~/Linux/Old/ | grep -v Tux.png | xargs -i {} mv ~/Linux/New/'


Answer 11:

怎么样,你的文件夹中移动的一切,然后就动Tux.png回来吗?

我想不出任何shell语法说随便“只是......一切”。



Answer 12:

人们可以跳过grep的是这样的:

ls ~/Linux/Old/ -QI Tux.png | xargs -I{} mv ~/Linux/Old/{} ~/Linux/New/


Answer 13:

怎么样:

mv $(echo * | sed s:Tux.png::g) ~/Linux/New/

你必须在文件夹中,但。



文章来源: Move all files except one
标签: linux bash glob