匹配模式的mv文件夹

时间:2014-04-19 12:18:09

标签: linux move command-line-interface

我有数百个文件夹要根据文件夹的名称进行整理,让我们说我有几个文件夹名称BBC和peppapig作为名称的一部分

e.g。 (文件夹)

 doc_BBC_life
 BBC.nature
 peppapigepisode1
 kidspeppapigseries
 animalsBBC-docment
 newfolder1
 newfolder2

现在我想移动文件夹(有四个),其名称为" BBC"进入名为newfolder1的子文件夹,同样适用于名称为" peppapig"的文件夹。进入newfolder2文件夹

注意:每个文件夹都有几个文件,其名称也是" BBC"或者" peppapig",我想保持内容而不会乱窜。

我想做这样的事情" mv BBC BBC /

使用mv的任何建议?感谢

3 个答案:

答案 0 :(得分:5)

您可以直接使用mv命令移动,如下所示

 mv *BBC* newfolder1

并且

 mv *peppapig* newfolder2

您也可以使用find

执行此类操作
 find . -type d -name '*BBC*' -exec mv "{}" newfolder1 \;

 find . -type d -name '*peppapig*' -exec mv "{}" newfolder2 \;

答案 1 :(得分:2)

无法写评论,所以我必须添加一个答案:

我尝试了arkascha给出的解决方案,因为它产生了错误的结果:

drwxrwxr-x 2 myuser myuser 4096 Apr 19 21:31 bbc
drwxrwxr-x 2 myuser myuser 4096 Apr 19 21:31 bbc1
drwxrwxr-x 2 myuser myuser 4096 Apr 19 21:31 bbc2
drwxrwxr-x 2 myuser myuser 4096 Apr 19 21:31 dir_to_mv
myuser@workstation:~/he$ find . -iname "*bbc*" -type d | xargs mv ./dir_to_mv/
myuser@workstation:~/he$ ls -l
total 4
drwxrwxr-x 5 myuser myuser 4096 Apr 19 21:31 bbc1
myuser@workstation:~/he$ cd bbc1/
myuser@workstation:~/he/bbc1$ ls -l
total 12
drwxrwxr-x 2 myuser myuser 4096 Apr 19 21:31 bbc
drwxrwxr-x 2 myuser myuser 4096 Apr 19 21:31 bbc2
drwxrwxr-x 2 myuser myuser 4096 Apr 19 21:31 dir_to_mv

你可以看到它没有按照假设将bbc目录移动到dir_to_mv。 以下工作:

find . -iname "*bbc*" -type d -exec mv '{}' ../dir_to_mv/ \;

请注意,您需要在其他路径中使用目录dir_to_mv,而不是在您正在处理的目录中。否则find会产生奇怪的递归结果。

人们总是必须通过find来处理这个问题。

答案 2 :(得分:0)

您可以使用find实用程序创建非常灵活的搜索,并使用args`实用程序将其与mv命令结合使用:

find . -iname "*bbc*" -type d | xargs mv ./BBC/

这会将当前文件夹中名称(案例不敏感)中包含“bbc”的所有目录移动到文件夹BBC中。移动目录根本不会改变或“扰乱”其内容。