我是Linux新手。我试图写一个shell脚本,它将移动文件到某些文件夹的基础上,他们的扩展名,例如在我的下载文件夹,我有混合文件类型的所有文件。我写了下面的脚本
mv *.mp3 ../Music
mv *.ogg ../Music
mv *.wav ../Music
mv *.mp4 ../Videos
mv *.flv ../Videos
当文件添加到该文件夹时,如何使其自动运行?现在我每次都必须手动运行脚本。
还有一个问题,有没有办法把这两种说法结合起来
mv *.mp3 ../../Music
mv *.ogg ../../Music
变成一份声明吗我尝试使用||
(C编程'or'运算符)和逗号,但它们似乎不起作用。
6条答案
按热度按时间7kqas0il1#
将文件添加到目录时没有触发器。如果文件是通过网页上传的,您可能可以让网页执行此操作。
在unix机器上,你可以在crontab中放置一个脚本来完成这个任务(或者在windows中放置task schedular)。谷歌crontab的一个how-to。
至于组合命令,请使用以下命令:
您可以根据需要包含许多不同的“globs”(带通配符的文件名)。最后一项应该是目标目录。
kdfy810k2#
两种方式:
find . -name '*mp3' -or -name '*ogg' -print | xargs -J% mv % ../../Music
find . -name '*mp3' -or -name '*ogg' -exec mv {} ../Music \;
第一个使用管道,可能会耗尽参数空间;而第二个可能使用太多的叉并且更慢。但是,两者都会起作用。
blpfk2vs3#
另一种方式是:
PS:option -v显示正在发生的事情(verbose)。
r7knjye24#
我喜欢这个方法:
vaj7vani5#
incron将监视文件系统并在某些事件时执行运行命令。
可以使用命令分隔符在一行中合并多个命令。无条件序列化命令分隔符是
;
。tf7tbtn26#
您可以使用for循环遍历源文件夹中的文件夹和子文件夹。下面的代码将帮助您将文件成对地从“/source/foler/path/”移动到“/destination/fodler/path/"。此代码将移动与它们的名称匹配并具有不同扩展名的文件。