我想从文本文件(日志文件)中提取时间戳,并根据日期和小时动态在文件夹中创建一个文件夹
Example file name : tag_data_2017_05_25_01_32_34.txt
file names :
-rw-r--r-- 1 root root 0 May 25 18:56 tag_data_2017_05_25_01_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:56 tag_data_2017_05_25_02_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:56 tag_data_2017_05_25_03_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:56 tag_data_2017_05_25_04_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:57 tag_data_2017_05_25_05_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:57 tag_data_2017_05_25_06_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:57 tag_data_2017_05_25_07_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:57 tag_data_2017_05_25_08_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:57 tag_data_2017_05_25_09_32_34.txt
-rw-r--r-- 1 root root 0 May 25 18:57 tag_data_2017_05_25_10_32_34.txt
所以我想在文件夹/ 2017/05/25/01(YYYY / DD / MM / HH)中创建一个文件夹
shopt -s nullglob
for filename in tag_data*.txt; do
foldername=$(date +%Y%m%d%H)
mkdir -p "$foldername"
mv "$filename" "$foldername"
echo "$filename $foldername" ;
done
输出应该像:
/2017/05/25/01/tag_data_2017_05_25_01_32_34.txt
但上面的脚本只是创建一个文件夹,直到20170525
并移动文件夹20170525
中的所有文件(不想在单个文件夹中复制)想要在层次结构中复制
文件tag_data_2017_05_25_01_32_34
应该转到文件夹/2017/05/25/01/tag_data_2017_05_25_01_32_34.txt
,/2017/05/25/01/tag_data_2017_05_25_02_32_34.txt
并继续这样做。
我是shell脚本的初学者。任何线索或帮助将不胜感激。
答案 0 :(得分:1)
请勿使用date
,它会为您提供当前日期,该日期可能不一定是文件名中编码的日期。
for f in tag*.txt; do
IFS=_ read _ _ year month day hour _ <<< "$f"
directory="$year/$month/$day/$hour"
mkdir -p "$directory" || exit 1 # Don't continue if this fails
mv "$f" "$directory"
done