如何根据文件名将所有文件复制到子目录?

时间:2015-12-28 23:27:46

标签: bash shell cp

我确信这可以通过bash脚本实现,但我想确保我没有遗漏任何明显的东西。谷歌没有太多帮助,所以也许你可以。

假设目录包含以下文件

    var picurl = "https://lh3.ggpht.com/lF8X5d9R-agU1_vrapxP8r8gxZjP21awryU_FLExYvvnReGMOp39tRxI4gSY9yqNyuRO=w300";
    $.ajax({
        url: picurl,
        success: function(data){
            var pic = $('<img>');
            pic.attr( 'src', picurl );
            pic.appendTo( 'body' );
        },
    });

我想找出最佳解决方案,根据文件名的前两个字母将文件夹中的所有文件复制到2级深的文件夹,结果将是

dir/file1
dir/newfile2
dir/oldfile3

1 个答案:

答案 0 :(得分:4)

这样的事情应该这样做:

cd dir
for file in *; do
    newpath="${file:0:1}/${file:1:1}"
    mkdir -p "$newpath"
    cp "$file" "$newpath"
done

请确保您的所有文件名都是两个字符或更多。

${var:n:m}只是“var的子字符串的Bash语法,从长度为n的{​​{1}}开始。”

如果还可以有任意子目录,如果要递归复制或添加测试以忽略m循环中的目录,请将-r添加到cp命令:

for