我是Linux新手.我正在尝试编写一个shell脚本,它会根据文件的扩展名将文件移动到某些文件夹,例如在我的下载文件夹中,我有所有混合文件类型的文件.我写了以下脚本
mv *.mp3 ../Music
mv *.ogg ../Music
mv *.wav ../Music
mv *.mp4 ../Videos
mv *.flv ../Videos
Run Code Online (Sandbox Code Playgroud)
将文件添加到此文件夹时,如何使其自动运行?现在我必须每次手动运行脚本.
还有一个问题,是否有任何方法可以将这两个陈述结合起来
mv *.mp3 ../../Music
mv *.ogg ../../Music
Run Code Online (Sandbox Code Playgroud)
成一个声明?我尝试使用||
(C编程'或'运算符)和逗号,但它们似乎不起作用.
AMA*_*nc. 32
将文件添加到目录时没有触发器.如果通过网页上传文件,您可以使网页执行此操作.
您可以在crontab中放置一个脚本来执行此操作,在unix机器上(或Windows中的任务计划程序).谷歌crontab的一个操作方法.
至于组合命令,请使用以下命令:
mv *.mp3 *.ogg ../../Music
Run Code Online (Sandbox Code Playgroud)
您可以根据需要包含尽可能多的不同"globs"(带有通配符的文件名).最后一件事应该是目标目录.
hd1*_*hd1 12
两种方式:
find . -name '*mp3' -or -name '*ogg' -print | xargs -J% mv % ../../Music
find . -name '*mp3' -or -name '*ogg' -exec mv {} ../Music \;
第一个使用管道,可能会耗尽参数空间; 而第二种可能会使用太多的叉子并且速度较慢.但是,两者都有效.
小智 6
我喜欢这个方法:
#!/bin/bash
for filename in *; do
if [[ -f "$filename" ]]; then
base=${filename%.*}
ext=${filename#$base.}
mkdir -p "${ext}"
mv "$filename" "${ext}"
fi
done
Run Code Online (Sandbox Code Playgroud)
小智 5
另一种方法是:
mv -v {*.mp3,*.ogg,*.wav} ../Music
mv -v {*.mp4,*.flv} ../Videos
Run Code Online (Sandbox Code Playgroud)
PS:选项 -v 显示发生了什么(详细)。