求一段 shell 命令写法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jamfer
V2EX    问与答

求一段 shell 命令写法

  •  
  •   jamfer 2019-10-17 12:49:52 +08:00 1820 次点击
    这是一个创建于 2188 天前的主题,其中的信息可能已经有所发展或是发生改变。
    父文件夹: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     Solana     5802 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 06:31 PVG 14:31 LAX 23:31 JFK 02:31
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86