Mac 下有什么办法能批量移动文件,删除子文件夹的办法?Automator? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stille
V2EX    macOS

Mac 下有什么办法能批量移动文件,删除子文件夹的办法?Automator?

  •  
  •   stille 2016-10-11 15:51:11 +08:00 6140 次点击
    这是一个创建于 3290 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前看到一个教程是利用 Automator 来批量重命名的,确实很方便.

    目前我有 1000 个文件夹,其中 300 个文件内就是图片,另外 700 个文件夹内分别都是一个子文件夹,子文件夹内在才是图片.

    我需要将这 700 个文件夹内的子文件夹内的图片批量移动到上层文件夹内,同时删除掉各子文件夹.

    由于不是程序员,所以实在是不编程或者命令来解决,特来求助了...

    11 条回复    2021-07-11 23:16:10 +08:00
    thekoc
        1
    thekoc  
       2016-10-11 17:34:53 +08:00
    ```
    测试
    ```
    thekoc
        2
    thekoc  
       2016-10-11 17:42:27 +08:00
    echo 'import os
    import sys
    import shutil


    def main():
    root_path = sys.argv[1]
    assert os.path.isdir(root_path)
    assert len(os.listdir(root_path)) == 1000

    for path in filter(lambda p: p != ".DS_Store", os.listdir(root_path)):
    abs_base_path = os.path.join(root_path, path)
    if len(os.listdir(abs_base_path)) > 0:
    if len(os.listdir(abs_base_path)) == 1:
    abs_child_path = os.path.join(abs_base_path, os.listdir(abs_base_path)[0])
    assert os.path.isdir(abs_child_path)
    [shutil.move(os.path.join(abs_child_path, src), abs_base_path) for src in os.listdir(abs_child_path)]
    os.removedirs(abs_child_path)
    else:
    assert all(os.path.isfile(p) for p in os.listdir(abs_base_path))
    print('All done.')

    if __name__ == "__main__":
    main()' > temunique92.py






    =======
    1. 打开终端(应用程序实用工具终端)
    2. 把上面的内容复制到终端,按回车
    3. 在终端输入 python temunique92.py 接着**不要**按回车,保持这个状态
    4. 在 Finder 里找到你**包含 1000 个文件夹**的那个文件夹,确保里面只有 1000 个文件夹,没有别的乱七八糟的东西
    5. 把那个文件夹按住,拖动到刚刚的终端窗口里面
    6. 现在你应该能看到刚刚输入的 python temunique92.py 后面多了一些东西,就是你的那个文件夹
    7. 按回车
    8. 如果出现了 All done. 以外的任何信息请复制或者截图给我
    thekoc
        3
    thekoc  
       2016-10-11 17:43:40 +08:00
    无视上面一条信息…缩进全给我搞乱了
    thekoc
        4
    thekoc  
       2016-10-11 17:47:17 +08:00
    把复制 ===== 上面的内容改成复制这个链接 https://gist.githubusercontent.com/thekoc/3111a48114c8a115cfd70c8eb6fd4c36/raw/61274f3bf690a282d1953acf282bff1cfb251c22/tem.sh 里面的所有内容,其他不变
    zander
        6
    zander  
       2016-10-11 19:44:43 +08:00 via iPhone
    find mv
    stille
        7
    stille  
    OP
       2016-10-11 21:38:08 +08:00
    还好来的晚..试试你最后一条
    @thekoc
    ouafukqk
        8
    ouafukqk  
       2016-10-11 23:22:41 +08:00
    stille
        9
    stille  
    OP
       2016-10-17 11:02:27 +08:00
    已经解决掉了..总结下方法

    首先必须把所有文件夹批量更名排序 例如 101-1000 共计 900 个文件夹 (文件夹不能以 0 开头,所以 001-099 不行)

    利用 Mac 终端 CD 命令到这 900 个文件夹的根目录下

    or i in {1001..1400}; do find "$PWD/$i" -name "*" -type f | xargs -I '{}' mv {} "$PWD/$i"; done

    就可以把所有子文件夹内文件移动到上层文件夹.

    然后需要批量删除空的子文件夹...我转到 Windows 下

    创建.bat 文件
    @echo off
    for /f "tokens=*" %%a in ('dir /b /ad /s C:\^|sort /r') do rd "%%a" /q 2>nul

    把 C:\改为需要删除空文件夹的根目录.即可
    stille
        10
    stille  
    OP
       2016-10-17 11:06:00 +08:00
    补充上面的
    or i in {1001..1400}; do find "$PWD/$i" -name "*" -type f | xargs -I '{}' mv {} "$PWD/$i"; done

    中间的{1001..1400}就是你文件夹命名序列,例如我的情况就是更改为 {101..1000} 一共处理 900 个文件夹

    另外批量重命名文件夹我是用的 Mac 下的 Automator,参考地址 http://bbs.feng.com/forum.php?mod=viewthread&tid=8171707
    twosim
        11
    twosim  
       2021-07-11 23:16:10 +08:00
    利用搜索功能,根据类型搜索改文件夹下的内容,然后把搜索结果全部拖动至上上一个文件夹即可。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2589 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:26 PVG 23:26 LAX 08:26 JFK 11:26
    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