是否可以将cut命令的结果发送到预定义的目录?

时间:2018-07-06 19:43:34

标签: bash shell unix cut

我目前正在学习如何编写Shell脚本,作为分配的一部分,我需要根据文件内的日期将已分配给我的文件分类到不同的目录中。

日期在文件的第一行,所有功能必须在同一脚本中。

我当前的想法是转换为所需的格式,然后使用mkdir -p函数创建多个目录,然后使用cut选择要在数据中突出显示的日期部分并返回它们,理想情况下,我现在希望能够从SelectYearSelectMonthSelectDay函数中获取这些输出,并将这些文件放入我已经在其中设置的相应目录中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

2 个答案:

答案 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 '-' '/' 
}