Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将后缀和前缀更改为目录中的数十亿个文件_Linux_Bash_Shell_Awk_Sed - Fatal编程技术网

Linux 将后缀和前缀更改为目录中的数十亿个文件

Linux 将后缀和前缀更改为目录中的数十亿个文件,linux,bash,shell,awk,sed,Linux,Bash,Shell,Awk,Sed,我在一个目录中有数十亿个文件,它们的名称如下: split-00342964 split-00342965 split-00342966 split-00342967 我想要 删除前缀split-00的步骤 将扩展名.png添加到所有文件中 我试过了 rename 's/^split-00//' split-00* 但是我得到了bash:/usr/bin/rename:参数列表太长 结果, 我正在寻找一种解决方案,它也可以扩展,这意味着执行上述重命名任务所需的时间最少。您可以使用以下

我在一个目录中有数十亿个文件,它们的名称如下:

split-00342964
split-00342965    
split-00342966
split-00342967
我想要

  • 删除前缀split-00的步骤
  • 将扩展名.png添加到所有文件中
  • 我试过了

    rename 's/^split-00//' split-00*
    
    但是我得到了
    bash:/usr/bin/rename:参数列表太长

    结果,


    我正在寻找一种解决方案,它也可以扩展,这意味着执行上述重命名任务所需的时间最少。

    您可以使用以下命令来实现这一点

    for f in split-00*; do 
        mv $f $(echo $f|awk '{print substr($0,9) ".png"}'); 
    done
    

    你可以通过循环来绕过“参数列表太长”,例如f in*的
    ;请重命名's/^split-00/'$f;完成
    您尝试的命令只会删除前缀,不会添加扩展名。。。我认为find+rename可能最有效。。。请尝试
    find-type f-name'split-00*'-exec rename-n's/split-00(.*)/$1.png/'{}+
    <代码>-n选项用于干运行,因此请先尝试使用几个文件。。如果您需要使用
    split-00
    添加扩展名而不考虑文件名,请尝试
    s/(?:split-00)?(*)/$1.png/
    ,我也想尝试此处发布的sed命令,但已立即删除