【问题标题】:Move newly created text files to a var created directory将新创建的文本文件移动到 var created 目录
【发布时间】:2015-08-04 11:03:55
【问题描述】:

我每天都有几个从模板创建的文本文档。这个过程我已经成功地实现了,尽管可能是以 Cro-Magnon 的方式。我希望将这些新创建的文本文件归档在 新创建的 日期文件夹中。

脚本成功地从模板创建文件 docs 并创建新日期的目录。我真的不想在其他地方创建这些文本文件,然后将它们移动到新创建的目录。而是直接在其中创建它们。我所有的研究都倾向于涉及已经存在的目录,而不是从 var 创建的目录。

我在下面只包含了一个文件创建示例。

希望您能提供帮助。 TIA

today=`date '+%y%m%d'`;
today_Folder=~/Desktop/test/"${today}"

if [[ ! -d $today_Folder ]]
 then
   mkdir "${today_Folder} `(date '+%A')`"
fi

cat ~/Desktop/test/template.txt >> ~/Desktop/test/dest.txt

附:我试图使关于文本文件的cat 命令更清晰——它只是创建文件。我不是要创建目录树。只需一个新创建的目录,它可以与文本文件一起在 test 中。

【问题讨论】:

  • 您的问题不清楚。 cat 语句是否应该将已创建的文件 docs 移动到新创建的目录?还是您的“脚本创建文件文档”?
  • 不,cat 正在制作文本文件。我希望文本文件存在于新创建的文件夹中。我每天都有 6 个文本文件需要存在于带有当天日期的文件夹中。这就是问题所在 - 该文件夹需要创建为 var,以便可以在其中插入日期。那么如何将新创建的文件夹(通过变量)作为创建这些文档的目标?

标签: bash


【解决方案1】:

您的问题是如何动态创建文件,同时创建包含该文件的所有路径?这以任何直观/便携的方式都是不可能的,而且通常程序并不总是必须在文件之前创建目录。您可以做的是将-p 标志传递给mkdir。在 Linux 系统上(这也可能不可移植),此标志表示“创建此路径所需的所有目录”。零目录是可以的,所以你不需要检查目录是否已经存在。因此,将整个 if 块更改为:

mkdir -p "${today_Folder} `(date '+%A')`"

另外,你想要一个字符串(路径)的方式有点臭,你使用三个操作来创建它。能不能简单点?当它们增加清晰度时,您需要更多陈述,但在这种情况下,步骤非常简单,唯一完成的事情就是让您的同事上去多次阅读您所写的内容。它可能适合将其更改为:

dir_path=...
mkdir -p "${dir_path}"

要做到这一点,请记住,您可以使用$() 添加命令替换,而不是反引号。这很有帮助,因为反引号不能嵌套 - 它使该行更具可读性,因为您可以清楚地看到命令的开始/结束。

【讨论】:

  • 我已经使用 Automator (osX) 成功创建了这个过程,但 Automator 只是复制了原始模板文件,所以我必须重新调整它们的创建日期以反映当天的日期。是的,我确定 IF 语句很臭,但那是因为我对 bash 脚本编写的经验为零 :-) 我使用它是因为如果脚本意外运行并且 today's 目录已经创建, IF 将取消该过程。有用。似乎用 bash 很难选择一个新创建的目录作为新创建文件的目的地。
  • @gazzasanx “困难”可能是轻描淡写。你就是不能。我考虑得越多,我就越有信心文件系统不会让您在同一操作中创建文件和目录。任何假装这样做的框架只会隐藏细节。因此,随着您向较低级别的编程方法发展,您必须自己完成更多的手动工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2018-04-07
相关资源
最近更新 更多