【发布时间】:2017-12-01 02:56:10
【问题描述】:
如果其中任何一个不是特别清楚,请告诉我,我会尽力澄清。
我基本上需要将一组具有各种扩展名和与文件名相似的模式的文件分类到与扩展名的模式和类型匹配的目录和子目录中。
稍微详细一点:
所有文件,无论扩展名如何,都以模式“zz####”开头,其中#### 是从 1 到 900 的数字; "zz1.zip 到 zz950.zip、zz1.mov 到 zz950.mov、zz1.mp4 到 zz950.mp4"
某些文件包含附加字符; “zz360_hello_world.zip”
有些文件包含空格; “zz370_hello world.zip”
我需要按照特定格式对这些文件进行排序并移动到目录和子目录中:“/home/hello/zz1/zip, /home/hello/zz1/vid”
如果目录和/或子目录不存在,我需要创建它们。
例子:
zz400_testing.zip ----> /home/hello/zz400/zip
zz400 testing video.mov ----> /home/hello/zz400/vid
zz500.zip ----> /home/hello/zz500/zip
zz500_testing another video.mp4 ----> /home/hello/zz500/vid
我在这里找到了一些关于更简单用例的答案,但无法满足我的特定需求。
任何帮助都将不胜感激。
谢谢!
编辑:添加我一直在搞乱的代码
for f in *.zip; do
set=`echo "$f"|sed 's/[0-9].*//'`
dir="/home/demo/$set/photos"
mkdir -p "$dir"
mv "$f" "$dir"
done
我想我只是想不通如何匹配正则表达式。我已经做到了这一点:
[demo@alpha grep]$ echo zz433.zip|sed 's/[0-9].*//'
zz
脚本将运行 mkdir,甚至将 zip 文件移动到适当的位置。我只是无法创建正确的顶级目录(zz433)。
【问题讨论】:
-
你的代码在哪里?你试过什么?
mkdir创建目录,ls使用通配符选择文件,或者find也可以这样做,mv移动文件,如果您需要循环文件,请使用while,而不是for,因为for不会正确处理空格。试试看,如果您在此处发布问题,我们将帮助您继续前进。 -
@Nic3500 抱歉,我已经用相关信息编辑了我的帖子。我是新手>_