我有一个脚本,该脚本在给定目录(<ResourceDictionary Source="Resources/Colors.xaml" />
)中查找旧文件,并将其压缩到另一个文件(/new
):
/old
当文件位于#!/bin/bash
export TAG="archive"
export NEW_DIR="/new"
export OLD_DIR="/old"
export FILE_RETENTION=2
# function to zip a file to OLD dir and remove it from NEW
function zip_rm(){
f_name=`basename "$1"`
source_base=`dirname $1`
[[ "$source_base" == "${NEW_DIR}" ]] && dest_base=${OLD_DIR}
dest="${dest_base}/${f_name}.zip"
logger -p local0.info -t "$TAG" "archiving ${1} to $dest"
out=`zip -j "${dest}" "${1}"`
[ $? -ne 0 ] && logger -p local0.err -t "$TAG" "zipping ${1} failed: $out"
out=`/bin/rm -f "${1}"`
[ $? -ne 0 ] && logger -t -p local0.err "$TAG" "removing ${1} failed: $out"
}
export -f zip_rm
logger -p local0.info -t "$TAG" "archive procedure started"
if [ -d "${NEW_DIR}" ]; then
logger -p local0.info -t "$TAG" "archiving ${NEW_DIR} started"
find ${NEW_DIR} -daystart -mtime +${FILE_RETENTION} -type f -print0 | xargs -0 -n 1 -P 0 -I {} bash -c 'zip_rm "$@"' _ {}
logger -p local0.info -t "$TAG" "archiving ${NEW_DIR} ended"
fi
中时,此方法可以正常工作-将$NEW_DIR
之前的文件压缩到$FILE_RETENTION
。
但是,当文件位于$OLD_DIR
之类的子目录下时,它们不是压缩为$NEW_DIR/ABC , $NEW_DIR/DEF
,而是压缩为“ /” 仅带有文件名。
我无法弄清楚为什么$OLD_DIR
更改为“ /” 的原因,而静态地将其分配为$dest_base
。
此外,“ dest_base=${OLD_DIR}
”命令可使用其绝对路径在子目录中找到所有文件。
我希望将find
中的所有文件压缩到$NEW_DIR
,并将子目录中的文件压缩到$OLD_DIR
我的错误在哪里?
请解释。
答案 0 :(得分:1)
以下是导致问题的行:
source_base=`dirname $1`
[[ "$source_base" == "${NEW_DIR}" ]] && dest_base=${OLD_DIR}
由于dirname new/ABC/file
输出new/ABC
,所以source_base
不等于NEW_DIR
,因此dest_base
保持未设置状态,并且${dest_base}/${f_name}.zip
扩展为{{1 }}。
答案 1 :(得分:1)
基于@oguzismail的评论,我实现了目标
source_base=$(dirname "$1" | cut -f 1-2 -d "/")