我目前正在学习如何编写Shell脚本,作为分配的一部分,我需要根据文件内的日期将已分配给我的文件分类到不同的目录中。
日期在文件的第一行,所有功能必须在同一脚本中。
我当前的想法是转换为所需的格式,然后使用mkdir -p
函数创建多个目录,然后使用cut
选择要在数据中突出显示的日期部分并返回它们,理想情况下,我现在希望能够从SelectYear
,SelectMonth
和SelectDay
函数中获取这些输出,并将这些文件放入我已经在其中设置的相应目录中CreateAllDirectories
功能。
这可能吗?
这是我需要用此脚本实现的最终结果,为文件中出现的每年创建一个目录,然后在这些年份的每个目录中为月份创建另一个目录,然后在月份目录中包含一个天的目录,然后是其中包含确切日期的所有文件的列表,如下所示:
[~/filesToSort] $ ls -R
.:
2000 2001 2002 2003 2004 2005 2006 2007 2008 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
./2000:
02 03 04 09 10 11 12
./2000/02:
09
./2000/02/09:
ff_1646921307 ….
当前这是我拥有的脚本:
#!/bin/bash
#Changes the date format from YYYY-MM-DD to YYYY/MM/DD
function ChangeSeperater{
head -n 1 ~/filesToSort/ff_* | tr '-' '/'
}
#Makes multiple directories
function CreateAllDirectories{
mkdir -p /year/month/day
}
#Cuts year from file
function SelectYear{
head -n 1 ~/filesToSort/ff_* | cut -c1-4
}
#Cuts month from file
function SelectMonth{
head -n 1 ~/filesToSort/ff_* | cut -c6-7
}
#Cuts day from file
function SelectDay{
head -n 1 ~/filesToSort/ff_* | cut -c9-10
}
编辑:感谢您的所有帮助! 如果有人感兴趣,这是完成的脚本:
#!/bin/bash
#Changes the date format from YYYY-MM-DD to YYYY/MM/DD
#Change Seperator function, gets the date from its parameter, changes the date from YYYY-MM-DD to YYYY/MM/DD
function ChangeSeperator() {
echo "$1" | tr '-' '/'
}
#Sorts the files into the correct directories, cuts the entire date from the file and turns it into a directory, uses the ChangeSeperator function from earlier make the parent directory and all sub directories
for file in ~/filesToSort/ff_*
do
directory=$(ChangeSeperator $(head -c 10 "$file"))
mkdir -p "$directory"
mv "$file" "$directory"
done
答案 0 :(得分:0)
首先,您可能需要在某个地方循环以筛查所有文件,并且可以考虑逐个处理它们。
关于日期,您可能应该查看有关日期的文档,该文档可以在那里为您提供大部分信息。
例如:
date -d 2018-07-01 +"%Y/%m/%d"
2018/07/01
顺便说一句,您总是可以做类似的事情:
d=$(date -d 2018-07-01 +"%Y/%m/%d")
echo "d="$d
d=2018/07/01
mkdir -p $d
希望这是足够的指针...在这里不做您的分配:)
答案 1 :(得分:0)
您不需要所有这些功能,只需将日期从yyyy-mm-dd
转换为路径名yyyy/mm/dd
的功能即可。
for file in ~/filesToSort/ff_*
do
directory=$(ChangeSeperator $(head -c 10 "$file"))
mkdir -p "$directory"
cp "$file" "$directory"
done
ChangeSeperator
函数需要从其参数获取日期:
ChangeSeperator() {
echo "$1" | tr '-' '/'
}