自动创建文件夹并移动文件



我有很多来自数据记录器(波形(的按小时排序的日常文件。我在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参数替换">,如果您想了解它,这里将对此进行描述,并且无需创建全新的进程来运行awksedcut来提取字段。

相关内容

  • 没有找到相关文章

最新更新