使用终端自动创建文件夹

使用终端自动创建文件夹

我正在尝试使用 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:我必须手动启动每个“媒体 - 年份”文件夹的“月份”文件夹的创建。最重要的是,我还必须复制每个“媒体 - 年份”文件夹中的“CSV”文件和可执行文件!真的很耗时。我不太清楚如何强制在每个“媒体 - 年份”中创建“月份”文件夹。事实上,要创建文件夹,我必须使用每个文件夹中的“./MakeMonthsFolder.command”启动该过程。
  • 问题 3:使用“find”命令时,我无法移动相关文件。我使用以下命令: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 中有新邮件”的消息邮件?基本上我想我的问题是我如何到达那里?

有什么帮助或建议吗?

谢谢大家

答案1

这个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.csv。 if 子句保证在创建目录时年份和月份变量都不为空。

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

相关内容