首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据扩展名将文件移动到目录

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

Stack Overflow用户
提问于 2013-06-27 11:23:29
回答 6查看 59.6K关注 0票数 28

我是Linux的新手。我正在尝试写一个外壳脚本,它将移动文件到特定文件夹的基础上,他们的扩展,例如在我的下载文件夹,我有所有文件的混合文件类型。我已经编写了以下脚本

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

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

还有一个问题,有没有办法把这两个语句结合起来?

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

写成一句话?我试着使用|| (C编程‘或’运算符‘)和逗号,但它们似乎不起作用。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-06-27 11:30:04

在将文件添加到目录时不会触发。如果文件是通过网页上传的,您也许能够让该网页执行此操作。

在unix机器上,你可以在crontab中放一个脚本来做这件事(或者在windows中放入任务调度)。Google crontab获取操作指南。

至于组合命令,请使用以下命令:

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

您可以包含任意多个不同的"globs“(带有通配符的文件名)。最后一件事应该是目标目录。

票数 47
EN

Stack Overflow用户

发布于 2013-06-27 11:31:22

两种方式:

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

第一个使用管道,可能会用完参数空间;而第二个可能使用太多的fork,速度较慢。但是,这两种方法都会起作用。

票数 13
EN

Stack Overflow用户

发布于 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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17334014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档