我是Linux的新手。我正在尝试写一个外壳脚本,它将移动文件到特定文件夹的基础上,他们的扩展,例如在我的下载文件夹,我有所有文件的混合文件类型。我已经编写了以下脚本
mv *.mp3 ../Music
mv *.ogg ../Music
mv *.wav ../Music
mv *.mp4 ../Videos
mv *.flv ../Videos
如何在将文件添加到此文件夹时使其自动运行?现在,我每次都必须手动运行脚本。
还有一个问题,有没有办法把这两个语句结合起来?
mv *.mp3 ../../Music
mv *.ogg ../../Music
写成一句话?我试着使用||
(C编程‘或’运算符‘)和逗号,但它们似乎不起作用。
发布于 2013-06-27 11:30:04
在将文件添加到目录时不会触发。如果文件是通过网页上传的,您也许能够让该网页执行此操作。
在unix机器上,你可以在crontab中放一个脚本来做这件事(或者在windows中放入任务调度)。Google crontab获取操作指南。
至于组合命令,请使用以下命令:
mv *.mp3 *.ogg ../../Music
您可以包含任意多个不同的"globs“(带有通配符的文件名)。最后一件事应该是目标目录。
发布于 2013-06-27 11:31:22
两种方式:
find . -name '*mp3' -or -name '*ogg' -print | xargs -J% mv % ../../Music
find . -name '*mp3' -or -name '*ogg' -exec mv {} ../Music \;
第一个使用管道,可能会用完参数空间;而第二个可能使用太多的fork,速度较慢。但是,这两种方法都会起作用。
发布于 2019-03-10 19:51:52
我喜欢这个方法:
#!/bin/bash
for filename in *; do
if [[ -f "$filename" ]]; then
base=${filename%.*}
ext=${filename#$base.}
mkdir -p "${ext}"
mv "$filename" "${ext}"
fi
done
https://stackoverflow.com/questions/17334014
复制相似问题