我有很多来自数据记录器(波形(的按小时排序的日常文件。我在U盘里下载了,现在我需要把它们保存在用波形的前8个字符命名的文件夹里。
这些文件具有以下模式:
年月日小时分钟-##。Code_Station_location_Channel
例如,在USB内部,我有:
2020-10-01-000-03.AM_REDDE_00_EHE;2020-10-01-100-03.AM_REDDE_00_EHE;2020-10-02-0300-03.AM_REDDE_00_EHE;2020-10-20-0000-03.AM_REDDE_00_EHE;2020-20-0100-03.AM_REDDE_00_EHE;2020-11-15-2000-03.AM_REDDE_00_EHE;2020-11-15-2100-03.AM_REDDE_00_EHE;2020-11-19-0400-03.AM_REDDE_00_EHE;2020-11-19-0900-03.AM_REDDE_00_EHE;
我修改了@user3360767中的一点代码(shell脚本,每天用时间戳创建文件夹,并推送时间戳生成的日志(,以加快创建文件夹并将文件移动到的过程
for filename in 2020-10-01*EHE; do
foldername=$(echo "$filename" | awk '{print (201001)}');
mkdir -p "$foldername"
mv "$filename" "$foldername"
echo "$filename $foldername" ;
done
2020-10-01*EHE
我在这里列出了2020-10-01-0000-003.AM_REDDE_00_EHE 的所有小时
foldername=$(echo"$filename"| awk"{print(201001(}"(;
在这里我创建了属于2020-10-01的文件夹,并用下面的行创建了文件夹,然后将所有文件移动到创建的文件夹中。
mkdir -p "$foldername"
mv "$filename" "$foldername"
echo "$filename $foldername" ;
正如您可能注意到的,每次文件更改日期时,我总是需要修改for filename in 2020-10-01*EHE
行。有没有一种方法可以尝试用文件的前8个数字创建文件夹?
Tonino
使用date
由于foldername
不会更改,因此不需要在循环中不断创建一个。
files="$(date +%Y-%m-%d)*EHE"
foldername=$(date +%Y%m%d)
mkdir -p "$foldername"
for filename in $files; do
mv "$filename" "$foldername"
echo "$filename $foldername"
done
编辑:
如果每次都要指定文件夹,可以将其作为参数传递,并使用sed
获取文件名模式
foldername=$1
files=$(echo $1 | sed 's/(....)(..)(..)/1-2-3/')
filepattern="$files*EHE"
mkdir -p "$foldername"
for filename in $filepattern; do
mv "$filename" "$foldername"
echo "$filename $foldername"
done
你称之为
./<yourscriptname>.sh 20101001
我认为您希望将名称以*EHE
结尾的所有文件移动到子目录中。将根据需要创建子目录,并根据每个文件名开头的日期命名,不带短划线/连字符。
请在临时目录中的文件副本上测试以下。
#!/bin/bash
for filename in *EHE ; do
# Derive folder by deleting all dashes from filename, then taking first 8 characters
folder=${filename//-/}
folder=${folder:0:8}
echo "Would move $filename to $folder"
# Uncomment next 2 lines to actually move file
# mkdir -p "$folder"
# mv "$filename" "$folder"
done
样本输出
Would move 2020-10-01-0000-03.AM_REDDE_00_EHE to 20201001
Would move 2020-10-01-0100-03.AM_REDDE_00_EHE to 20201001
注意2行:
folder=${filename//-/}
folder=${folder:0:8}
使用";bash参数替换">,如果您想了解它,这里将对此进行描述,并且无需创建全新的进程来运行awk
、sed
或cut
来提取字段。