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

2016-10-11 15:51:11 +08:00
 stille

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

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

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

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

5666 次点击
所在节点    macOS
11 条回复
thekoc
2016-10-11 17:34:53 +08:00
```
测试
```
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
2016-10-11 17:43:40 +08:00
无视上面一条信息…缩进全给我搞乱了
thekoc
2016-10-11 17:47:17 +08:00
把复制 ===== 上面的内容改成复制这个链接 https://gist.githubusercontent.com/thekoc/3111a48114c8a115cfd70c8eb6fd4c36/raw/61274f3bf690a282d1953acf282bff1cfb251c22/tem.sh 里面的所有内容,其他不变
thekoc
2016-10-11 17:51:35 +08:00
zander
2016-10-11 19:44:43 +08:00
find mv
stille
2016-10-11 21:38:08 +08:00
还好来的晚..试试你最后一条
@thekoc
ouafukqk
2016-10-11 23:22:41 +08:00
stille
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
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
2021-07-11 23:16:10 +08:00
利用搜索功能,根据类型搜索改文件夹下的内容,然后把搜索结果全部拖动至上上一个文件夹即可。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/311912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX