stille
V2EX  ›  macOS

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

  •  
  •   stille · Oct 11, 2016 · 6650 views
    This topic created in 3512 days ago, the information mentioned may be changed or developed.

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

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

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

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

    11 replies    2021-07-11 23:16:10 +08:00
    thekoc
        1
    thekoc  
       Oct 11, 2016
    ```
    测试
    ```
    thekoc
        2
    thekoc  
       Oct 11, 2016
    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  
       Oct 11, 2016
    无视上面一条信息…缩进全给我搞乱了
    thekoc
        4
    thekoc  
       Oct 11, 2016
    把复制 ===== 上面的内容改成复制这个链接 https://gist.githubusercontent.com/thekoc/3111a48114c8a115cfd70c8eb6fd4c36/raw/61274f3bf690a282d1953acf282bff1cfb251c22/tem.sh 里面的所有内容,其他不变
    zander
        6
    zander  
       Oct 11, 2016 via iPhone
    find mv
    stille
        7
    stille  
    OP
       Oct 11, 2016
    还好来的晚..试试你最后一条
    @thekoc
    stille
        9
    stille  
    OP
       Oct 17, 2016
    已经解决掉了..总结下方法

    首先必须把所有文件夹批量更名排序 例如 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
       Oct 17, 2016
    补充上面的
    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  
       Jul 11, 2021
    利用搜索功能,根据类型搜索改文件夹下的内容,然后把搜索结果全部拖动至上上一个文件夹即可。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1323 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 17:05 · PVG 01:05 · LAX 10:05 · JFK 13:05
    ♥ Do have faith in what you're doing.