给定路径被更改为“ /”

时间:2018-10-08 10:10:00

标签: linux bash

我有一个脚本,该脚本在给定目录(<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

我的错误在哪里?

请解释。

2 个答案:

答案 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 "/")