Linux 给定路径正在更改为“路径”/&引用;

Linux 给定路径正在更改为“路径”/&引用;,linux,bash,Linux,Bash,我有一个脚本,它在给定目录(/new)中查找旧文件,并将它们压缩到另一个目录(/old): 当文件位于$NEW\u DIR中时,这将按预期工作-早于$FILE\u RETENTION的文件将压缩到$OLD\u DIR中 但是,当文件位于子目录下时,如$NEW\u DIR/ABC,$NEW\u DIR/DEF,它们不会压缩到$OLD\u DIR,而是压缩到仅带有文件名的“/” 我不明白为什么$dest\u base会变为“/”,而它被静态分配为dest\u base=${OLD\u DIR} 此外

我有一个脚本,它在给定目录(
/new
)中查找旧文件,并将它们压缩到另一个目录(
/old
):

当文件位于
$NEW\u DIR
中时,这将按预期工作-早于
$FILE\u RETENTION
的文件将压缩到
$OLD\u DIR

但是,当文件位于子目录下时,如
$NEW\u DIR/ABC,$NEW\u DIR/DEF
,它们不会压缩到
$OLD\u DIR
,而是压缩到仅带有文件名的“/”

我不明白为什么
$dest\u base
会变为“/”,而它被静态分配为
dest\u base=${OLD\u DIR}

此外,“
find
”命令使用其绝对路径定位子目录中的所有文件

我希望
$NEW\u DIR
中的所有文件将压缩到
$OLD\u DIR
,子目录中的文件压缩到
$OLD\u DIR/subdirname/$dest

我的错在哪里


请解释。

这些是导致问题的原因:

source_base=`dirname $1`
[[ "$source_base" == "${NEW_DIR}" ]] && dest_base=${OLD_DIR}

由于
dirname new/ABC/file
输出
new/ABC
source\u base
不等于
new\u DIR
,因此
dest\u base
保持未设置,并且
${dest\u base}/${f\u name}.zip
扩展为
/file.zip

,基于@oguzismail

source_base=$(dirname "$1" | cut -f 1-2 -d "/")

很有意义。。。用尽可能通用的方式实现预期目标的最佳方法是什么?我的意思是,我不想分配多个变量。这无关紧要,因为“旧”目录每隔一段时间就会被旋转一次。按照目前的方法,“新”目录和子目录中的所有文件都被压缩到“旧”目录中,而不排序到目录,然后被删除。另请参见,(U&L.SE),(SO),(AskU)等。
source_base=$(dirname "$1" | cut -f 1-2 -d "/")