我有点难以把这一切整合在一起……
我想编写一个简单的 shell 脚本来组织和排序分布在 3 个或 4 个目录中的大约 60 GB 的音乐和电影文件。
我需要将.mp3
、、.wma
视频等文件与错误文件和不需要的垃圾文件分开。我想将它们直接发送到一个新目录中,并将音频和视频文件分开。我将它们移动到一个新的物理设备(我买的 SD 卡)上。我想从终端完成所有这些操作。
我的问题是......将所有这些命令链接在一起的最佳方法是什么?
我是否使用 grep 搜索以后缀结尾的文件str
,.mp3
然后将该 >> 的结果通过管道传输到anewfile.txt
?
或者说find
更适合这个任务?或者都不是?
在提问之前,我已经阅读了无数个小时的文档,因为我不想浪费任何人的时间,但我尝试的方法都没有用。我似乎无法独自获得全面的结果。当我尝试将所有这些放入一个全面的实用脚本中以进行一些简单的文件操作时,它失败了。我迷失在手册页中……我需要与有经验的人对话。
我的东西是这样的:
cd Volumes/../music/*filesIwant* ; grep -i `'.mp3, .wma'` >> '*new.dir/\Music \Movies*
坦白说,很多类似的东西的变化都无法让它流动起来……
任何帮助将不胜感激。
我的脚本如下
cd ../hdd_music/ ; cp
我的问题:这是最好的方法吗?
答案1
可能适用于此的工具是zmv
,因为它有办法测试文件移动命令而无需实际更改任何内容。在 中尝试以下命令zsh
:
autoload zmv
cd /Volumes/.../music
zmv -n '*filesIwant*.mp3' '/.../newdir/Music/'
zmv -n '*filesIwant*.wma' '/.../newdir/Music/'
zmv -n '*filesIwant*.mpg' '/.../newdir/Movies/'
使用该-n
选项,命令将仅报告将发生的文件移动,但不执行它们。设置该选项后,您可以尝试各种可能性,直到找到可行的方法。请注意,...
上述示例中的文件名和目录名只是占位符,而不是系统上的确切名称;... 不是语法的一部分。
一些简短的说明:
zmv
和 移动文件的底层命令是mv
。该命令的基本语法类似于mv subdir/file.mp3 anotherdir/file.mp3
。- (更改目录)命令
cd
通常不使用像*
和 这样的通配符?
。只需输入类似 的内容即可cd /Users/zjs/Documents
。 >>
和符号>
用于改变打印输出和消息的目的地;在移动命令中不需要它。
Stack Exchange/Super User 不适合进行关于如何处理问题和选择路径的初始对话;它更适合更具体的问题和答案。您可能更适合访问包含有关这些主题的较长文章的网站,例如这个。
祝你好运!