我正在编写一个 shell 脚本,该脚本搜索过去 24 小时内修改的目录,然后使用 tar 对其进行压缩。
文件夹搜索:
find /path to log directory/ -maxdepth 1 -type d -mtime +0
示例输出:
/path to log directory/01_05_2016
/path to log directory/02_05_2016
/path to log directory/03_05_2016
/path to log directory/04_05_2016
截断不必要的字符:
find /path to log directory/ -maxdepth 1 -type d -mtime +0 | tr -d "_" | tr -d "path to log directory"
示例输出:
01052016 02052016 03052016 04052016
使用“sed”将截断的字符串分隔为单独的数组元素:
# Folder search
declare -a array="($(find <0-24 hour directory serach> | <truncate uncecessary character> | sed 's/\([0-9]*\).*/[\1]="\1"/'))"
# Array Printing
echo "Number of Array Elements: "${#array[@]}
echo "array[01052016]: " ${array[01052016]}
echo "array[02052016]: " ${array[02052016]}
echo "array[03052016]: " ${array[03052016]}
echo "array[04052016]: " ${array[04052016]}
示例输出
Number of Array Elements: 4
array[01052016]: 01052016
array[02052016]: 02052016
array[03052016]: 03052016
array[04052016]: 04052016
压缩输出:
LOG_DIR_NAME='<find folder>'
xargs tar -cvzPf /ouput folder/logname.tar.gz /path to log directory $LOG_DIR_NAME
问题陈述:
通过使用 sed 命令,我可以将搜索字符串分成单独的数组元素。使用此命令
sed 's/\([0-9]*\).*/[\1]="\1"/'
其中 [\1] 定义我的数组索引,“\1”定义我的元素。
所需输出 我有兴趣获取从索引(0 到 n)存储的数组元素
array[0]: 01052016
array[1]: 02052016
array[2]: 03052016
array[3]: 04052016
在这种情况下,如何自定义数组索引或在不知道起始索引的情况下遍历数组?
请帮忙
谢谢
答案1
首先,您应该将命令简化为:
$ find "/path to log directory/" -maxdepth 1 -type d -mtime +0 | sed 's#.*/##; s#_##g'
01052016
03052016
04052016
02052016
接下来,要保存为数组,您可以这样做:
array=( $(find "/path to log directory/" -maxdepth 1 -type d -mtime +0 | sed 's#.*/##; s#_##g') )
这可以根据需要将其保存在一个具有数字的数组中,索引从 0 开始递增:
$ for i in {0..3}; do echo "$i : ${array[$i]}"; done
0 : 01052016
1 : 03052016
2 : 04052016
3 : 02052016
也就是说,如果您确实发现自己需要迭代关联数组,您也可以这样做:
$ declare -a array=( "foo"=>"bar" "baz"=>"bad" )
$ for i in ${!array[*]}; do echo "$i : ${array[$i]}"; done
baz : bad
foo : bar