使用终端自动创建文件夹

劳伦·里希(Laurent Richer)

我正在尝试使用Mac OSX的终端对NAS上的文件进行排序。我正计划使用以下步骤:

  1. 创建特定年份的文件夹
  2. 为每个月创建文件夹
  3. 使用“查找”命令来标识年和月,然后将文件移动到相关文件夹。

我已经为步骤1到2创建了2个可执行文件。我仍在考虑为步骤3设置第3个文件,但是遇到了问题。

有关信息:

文件1:“ MakeMediaYearFolders.command”具有以下代码行

#! /bin/bash
xargs -tI % mkdir % < MediaYearFolders.csv

其中:“ MediaYearFolders.csv”具有以下几行

Media - 1999
Media - 2000
...
Media - 2020

文件2:“ MakeMonthsFolder.command”具有以下代码行

#! /bin/bash
cd /Users/Name/Desktop/DROBO TEST/2. SORTED/Media - 1999/
xargs -tI % mkdir % < MonthsFolders.csv

与“ MonthsFolders.csv”具有以下几行

01 - January
...
12 - December

文件3:当前具有以下内容

#! /bin/bash
cp -fv /Users/name/Desktop/DROBO TEST/2. SORTED/MonthsFolders.csv /Users/name/Desktop/DROBO TEST/2. SORTED/Media - 1999
cp -fv /Users/name/Desktop/DROBO TEST/2. SORTED/MakeMonthsFolder.command /Users/name/Desktop/DROBO TEST/2. SORTED/Media - 1999
Cd /Users/name/Desktop/DROBO TEST/2. SORTED/Media - 1999
xargs -tI % mkdir % < MonthsFolders.csv

我面临的问题是多重的,我不确定如何解决这些问题:

  • 问题1:我无法为步骤1和2创建单个文件,因为我不确定如何强制在每个“媒体-年”文件夹中创建“月”文件夹。当我尝试时,文件只是没有被复制,并且没有错误消息显示。另外,正在包含“媒体-年”文件夹的根文件夹中创建“月”文件夹
  • 问题2:我必须为每个“媒体-年”文件夹手动启动“月”文件夹的创建。最重要的是,我还必须在每个“ media-Year”文件夹中复制“ CSV”文件和可执行文件!真的很费时间。我不太确定如何在每个“媒体-年”中强制创建“月”文件夹。实际上,要创建文件夹,我必须使用每个文件夹中的“ ./MakeMonthsFolder.command”启动该过程。
  • 问题3:使用“查找”命令时,我无法移动相关文件。我用下面的命令:find /Users/name/Desktop/DROBO\ TEST/1.\ SOURCE -name "201704*" -exec mv -v -- /Users/name/Desktop/DROBO\ TEST/1.\ SOURCE /Users/name/Desktop/DROBO\ TEST/Media\ -\ 2017/04\ -\ April我从系统收到以下消息:find: -exec: no terminating ";" or "+"我不太确定如何解释这个,更不用说对它了;-)

最重要的事情是:如何获得消息“您在/ var / mail / name中有新邮件”的邮件?基本上,我想我的问题是如何到达那里?

任何帮助,建议吗?

谢谢大家

用户名

该shell脚本虽然效率不高,但可以实现步骤1和2:

#!/bin/sh
while read -r year; do
    if [ -n "$year" ]; then
        mkdir "$year"
    else
        continue
    fi
    while read -r month; do
        if [ -n "$month" ]; then
            mkdir "$year/$month"
        else
            continue
        fi
    done < MonthsFolders.csv
done < MediaYearFolders.csv

它只是从中读取每一行MediaYearFolders.csv,创建一个具有该名称的目录,然后从中读取其中几个月的目录MonthsFolders.csvif子句保证在创建目录时,year和month变量都不为空。

find语法可能有点棘手。正确的书写方式是

find /Users/name/Desktop/DROBO\ TEST/1.\ SOURCE -name "201704*" -exec mv -v -- {} /Users/name/Desktop/DROBO\ TEST/Media\ -\ 2017/04\ -\ April \;

如您所见,每个找到的文件进入,{}-exec位以终止\;请参阅man find以获取更多信息。

当心:您需要保护在引号中包含空格的字符串或转义空格字符:

cd /Users/.../DROBO TESTcd "/Users/.../DROBO TEST"

cd /Users/.../DROBO TESTcd /Users/.../DROBO\ TEST

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章