根据扩展名将文件移动到目录

我是Linux新手。 我想写一个shell脚本,将文件移动到某些文件夹的基础上扩展名 ,例如在我的下载文件夹,我有所有文件的混合文件types。 我写了下面的脚本

mv *.mp3 ../Music mv *.ogg ../Music mv *.wav ../Music mv *.mp4 ../Videos mv *.flv ../Videos 

如何将文件添加到此文件夹时自动运行? 现在我必须每次手动运行脚本。

还有一个问题,有没有什么办法来结合这两个陈述

 mv *.mp3 ../../Music mv *.ogg ../../Music 

成一个单一的声明? 我尝试使用|| (C编程“或”运算符)和逗号,但他们似乎没有工作。

Solutions Collecting From Web of "根据扩展名将文件移动到目录"

当文件被添加到目录时没有触发器。 如果文件通过网页上传,您可能可以使网页做到这一点。

你可以在crontab中放置一个脚本,在unix机器上(或者在windows中调度)。 谷歌crontab的一个方法。

至于结合你的命令,使用以下内容:

 mv *.mp3 *.ogg ../../Music 

你可以包括许多不同的“globs”(文件名与通配符),只要你喜欢。 最后的东西应该是目标目录。

两种方式:

  1. 找 。 -name'* mp3'-or -name'* ogg'-print | xargs -J%mv%../../Music
  2. 找 。 -name'* mp3'-or -name'* ogg'-exec mv {} ../Music \;

第一个使用管道,可能会用完空间; 而第二个可能会使用太多的叉子,而且会变慢。 但是,两者都会起作用。

incron将监视文件系统并在某些事件中执行运行命令。

您可以通过使用命令分隔符将多个命令组合在一行中。 无条件的序列化命令分隔符是;

 command1 ; command2 

另一种方法是:

 mv -v {*.mp3,*.ogg,*.wav} ../Music mv -v {*.mp4,*.flv} ../Videos 

PS:选项-v显示正在发生什么(详细)。