V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jamfer
V2EX  ›  问与答

求一段 shell 命令写法

  •  
  •   jamfer · 2019-10-17 12:49:52 +08:00 · 1503 次点击
    这是一个创建于 1856 天前的主题,其中的信息可能已经有所发展或是发生改变。
    父文件夹:father
    子文件夹:61,62,63,64 (这部分省略了...),71,72
    子文件夹里边包含了一堆图片,命名方式全部都是:1.jpg ,2.jpg ,3.jpg... 图片数量不固定

    需求:把所有子文件夹里的图片都放到父文件夹里,并且按照 1.jpg ,2.jpg ,3.jpg... 的方式命名。
    nybux
        1
    nybux  
       2019-10-17 13:13:48 +08:00   ❤️ 1
    cd father && find | xarg -n 1 -I {} cp {} ..
    jamfer
        2
    jamfer  
    OP
       2019-10-17 13:17:29 +08:00
    @nybux 提示 xarg: command not found 是什么原因
    ik
        3
    ik  
       2019-10-17 13:21:47 +08:00 via iPhone
    xargs
    yorks
        4
    yorks  
       2019-10-17 13:26:40 +08:00   ❤️ 1
    cd father
    for f in */*.jpg ; do echo $f; rsync -b $f .;done
    jamfer
        5
    jamfer  
    OP
       2019-10-17 13:42:24 +08:00
    @yorks 新文件把旧文件覆盖了,可能需求没说清楚,最后生成的 1.jpg ,2.jpg ,3.jpg... 要按照文件夹的顺序顺延。

    比如 61/ 里边是 1.jpg ,2.jpg ,3.jpg ,62/里边也是 1.jpg ,2.jpg ,3.jpg 最后生成的应该是 1.jpg ,2.jpg ,3.jpg ,4.jpg ,5.jpg ,6.jpg

    或者能生成 61-1.jpg ,61-2.jpg ,61-3.jpg ,62-1.jpg ,62-2.jpg ,62-3.jpg 这样也行。
    hugee
        6
    hugee  
       2019-10-17 13:50:53 +08:00 via Android
    就十几个文件夹。用 tc 手动操作两步就完成了,还需要写什么脚本?
    jamfer
        7
    jamfer  
    OP
       2019-10-17 13:52:25 +08:00
    @hugee 类似的文件夹有几百个
    Chewbacca
        8
    Chewbacca  
       2019-10-17 14:11:23 +08:00   ❤️ 1
    cd father && find | rename "s#\./## && s#/#-#g unless -d"
    jasonyang9
        9
    jasonyang9  
       2019-10-17 14:11:36 +08:00
    思路:递归列出所有子目录中的.jpg ,写到一个临时文件,用脚本移动每个文件到目标目录,同时重命名为 序号 或 行号 或 子目录名-序号 形式。。。
    scukmh
        10
    scukmh  
       2019-10-17 14:33:17 +08:00   ❤️ 1
    cd father
    for f in */*.jpg ; do echo $f;prefix=`echo $f | cut -d'/' -f1`;filename=`echo $f | cut -d'/' -f2`; echo $filename;newfilename=$prefix"-"$filename; echo $newfilename; cp $f $newfilename;done
    wangweiggsn
        11
    wangweiggsn  
       2019-10-17 14:34:40 +08:00
    windows 会,linux 不会,哈哈。
    用 excel 辅助写代码也行,A 列写所有原来的文件名,B 列用公式加工成想要的文件名,A 列前插入一列写 move 或 ren 即可。
    lululau
        12
    lululau  
       2019-10-17 14:41:22 +08:00
    zsh: cd father && zmv '(*)/(*)' '../$1-$2'
    jamfer
        13
    jamfer  
    OP
       2019-10-17 14:46:40 +08:00
    @scukmh
    @lululau 感谢两位,搞定了
    gshao666666
        14
    gshao666666  
       2019-10-18 17:05:15 +08:00
    cd father && for i in */*.jpg;do cp $i `echo $i|awk -F/ '{print $1"-"$2}'`; done
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 07:42 · PVG 15:42 · LAX 23:42 · JFK 02:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.