我如何才能将所有的文件,除了一个? 我在寻找的东西,如:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
在那里我移动旧的东西到新的东西-folder除了Tux.png
。 !-sign表示否定。 有一些工具的工作吗?
我如何才能将所有的文件,除了一个? 我在寻找的东西,如:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
在那里我移动旧的东西到新的东西-folder除了Tux.png
。 !-sign表示否定。 有一些工具的工作吗?
如果你使用bash,并有extglob
外壳选项集(通常情况下):
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
把下面给你的.bashrc
shopt -s extglob
它扩展正则表达式。 然后,您可以将所有的文件,除了一个接
mv !(fileOne) ~/path/newFolder
需要注意的是,在拷贝目录,正向闪光灯无法使用的名称作为注意到线程为什么extglob除了除了条件打破? :
cp -r !(Backups.backupdb) /home/masi/Documents/
所以Backups.backupdb/
是否定之前错在这里,我不会在没有由于使用了错误的风险,移动目录,然后用其他的命令和其他可能的例外水珠使用它。
我会去与传统的查找和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 Tux.png .Tux.png
mv * ~/somefolder
mv .Tux.png Tux.png
我认为做的最简单的方法是用反引号
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罗亚
对于bash, 某事的答案是正确的。 这里是zsh的 (我选择的外壳)语法:
mv ~/Linux/Old/^Tux.png ~/Linux/New/
需要EXTENDED_GLOB
外壳选项进行设置。
我觉得这是一个更加安全,更容易依靠简单的举动,排除某些文件或目录。
ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET
以下不是100%保证方法,并且不应当在所有尝试的脚本。 但有些时候,它是快速交互的shell使用不够好。 一个文件的文件水珠像
[abc]*
(将匹配第一个,b或c的名字中的所有文件)可通过首先将“^”字符被否定的,即
[^abc]*
我有时会使用这个不匹配“的lost + found”目录下,例如像:
mv /mnt/usbdisk/[^l]* /home/user/stuff/.
当然,如果有开始l其他文件,我不得不事后处理这些。
mv `find Linux/Old '!' -type d | fgrep -v Tux.png` Linux/New
find命令列出所有常规文件和fgrep一样命令过滤掉任何Tux.png。 该反引号告诉mV到移动所产生的文件列表。
ls ~/Linux/Old/ | grep -v Tux.png | xargs -i {} mv ~/Linux/New/'
怎么样,你的文件夹中移动的一切,然后就动Tux.png回来吗?
我想不出任何shell语法说随便“只是......一切”。
人们可以跳过grep的是这样的:
ls ~/Linux/Old/ -QI Tux.png | xargs -I{} mv ~/Linux/Old/{} ~/Linux/New/
怎么样:
mv $(echo * | sed s:Tux.png::g) ~/Linux/New/
你必须在文件夹中,但。