V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stille
V2EX  ›  macOS

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

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

    之前看到一个教程是利用 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   ·   实用小工具   ·   3449 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:31 · PVG 19:31 · LAX 03:31 · JFK 06:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.