Bash脚本将文件排序到具有相同名称的文件夹中

时间:2017-05-09 13:37:42

标签: linux bash

所以我一直想把它拉到一起。使用了不同的方法,也找到了一些部分答案,但我在这里找到的答案都没有用,或者只回答了部分问题,或类似的问题。

我有一个具有以下结构的文件夹:

nameXX.tar.gz
md5nameXX.txt
debugnameXX.txt

nameYY.tar.gz
md5nameYY.txt
debugnameYY.txt

等等...

等等,你可以看到改变的文件名的唯一部分是XX,YY等

我需要的是创建一个脚本,将所有与XX,YY等匹配的文件移动到具有相同名称的文件夹中。

所以例如我想移动所有,

nameXX.tar.gz ,
md5nameXX.txt, 
debugnameXX.txt
All those would move into a folder named nameXX

详细说明那些是备份快照。每个备份快照创建3个文件。 buckup-TIMESTAMP.tar.gz; md5backup-TIMESTAMP.tXT; debugbackup-TIMESTAMP.txt。我只需要一个脚本,将所有3个文件移动到名为backup-TIMESTAMP的同一文件夹中。在简历中,YY或XX表示不同的时间戳。 -

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我没有进行复杂的检查,但至少这可以让你从某事开始:

for name in `find . -name "*.tar.gz" | xargs sh -c 'basename $1 .tar.gz' dummy`
do 
    echo "Processing $name" 
    mkdir $name 
    find . -name "$name*" -type f -exec mv {} $name \; 
done

此代码假设您有文件.tar.gz,按名称创建文件夹并将所有文件从该文件夹开始移动。

答案 1 :(得分:0)

在这里工作的信息不够,每次XX和YY都一样吗?如果是这样,你可以在一个单行mv命令中做每一个

mv *YY.* /folderYY