我需要 checkin 一个包含 150.000 个这种格式的 zip 文件的目录:
log_from_2012_08_14-11:57:12_To_2012_08_14-13:57:12.zip
log_from_2012_08_14-13:57:12_To_2012_08_14-15:57:12.zip
log_from_2012_08_14-15:57:12_To_2012_08_14-17:57:12.zip
如果有一个名称等于文件日期的目录:
2012_08_14
然后将 From_2012_08_14 中存在的所有文件移动到该目录,如果不创建它
( mkdir date +%Y_%M_%D )
然后检查从 8 月到今天 11 月的每一天,每天的每个文件都在自己的目录中创建并移动到那里。
最佳答案
cd /relevant/log/directory
# Create the necessary sub-directories
ls *from_????_??_??-??:??:??_To_????_??_??-??:??:??.zip |
sed 's/.*from_\([0-9]\{4\}_[0-9][0-9]_[0-9][0-9]\).*/\1/' |
sort -u |
xargs mkdir -p
# Move the files into the sub-directories
ls *from_????_??_??-??:??:??_To_????_??_??-??:??:??.zip |
sed 's/.*from_\([0-9]\{4\}_[0-9][0-9]_[0-9][0-9]\).*/mv & \1;/' |
sh -x
-x
是可选的,但它会向您展示正在发生的事情。我假设您的文件名都不包含空格或换行符。我还假设没有包含字母数字的文件,其中 shell 模式中的 ?
应该与数字匹配。您可以将每个 ?
扩展为 [0-9]
如果您必须完全偏执,或者修改 sed
脚本以丢弃不存在的名称'匹配等
关于linux - Shell 脚本 mkdir(如果没有)和 mv 文件到每一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225053/