gpt4 book ai didi

linux - 如果不做某事,则使用 IF 查看目录是否存在

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:29 26 4
gpt4 key购买 nike

如果 $DIR2 没有相同的目录名称,我正在尝试将目录从 $DIR1 移动到 $DIR2

如果 [[ ! $(ls -d/$DIR2/* | grep test) ]] 是我目前拥有的。然后
mv $DIR1/测试*/$DIR2
fi

首先它给出

ls: cannot access //data/lims/PROCESSING/*: No such file or directory

当 $DIR2 为空时

但是,它仍然有效。

其次当我运行 shell 脚本两次时。它不允许我移动具有相似名称的目录。

例如在 $DIR1 我有 test-1 test-2 test-3当它第一次运行时,所有三个目录都移动到 $DIR2之后我在 $DIR1 处执行 mkdir test-4 并再次运行脚本..它不允许我移动 test-4,因为我的循环认为 test-4 已经存在,因为我正在抓取所有测试

我怎样才能四处移动 test-4 ?

最佳答案

首先,您可以使用 bash 内置的“如果目录存在则为真”表达式检查目录是否存在:

test="/some/path/maybe"
if [ -d "$test" ]; then
echo "$test is a directory"
fi

但是,您想测试某物是否不是目录。您已经在代码中表明您已经知道如何否定表达式:

test="/some/path/maybe"
if [ ! -d "$test" ]; then
echo "$test is NOT a directory"
fi

您似乎也在使用 ls 来获取文件列表。也许您想遍历它们并在文件不是目录时执行某些操作?

dir="/some/path/maybe"
for test in $(ls $dir);
do
if [ ! -d $test ]; then
echo "$test is NOT a directory."
fi
done

寻找像这样的 bash 东西的好地方是 Machtelt Garrels 的指南。 His page on the various expressions you can use in if statements对我帮助很大。

如果目标中不存在目录,则将目录从源移动到目标:

为了便于阅读,我将把你的 DIR1DIR2 称为 srcdest。首先,让我们声明它们:

src="/place/dir1/"
dest="/place/dir2/"

注意结尾的斜线。我们会将文件夹的名称附加到这些路径,以便尾部斜杠使它更简单。您似乎还通过名称中是否包含 test 一词来限制要移动的目录:

filter="test"

所以,让我们首先遍历 source 中通过 filter 的目录;如果它们不存在于 dest 中,我们将它们移到那里:

for dir in $(ls -d $src | grep $filter); do
if [ ! -d "$dest$dir" ]; then
mv "$src$dir" "$dest"
fi
done

希望这能解决您的问题。但请注意,@gniourf_gniourf 在评论中发布了一个链接,请注意!

关于linux - 如果不做某事,则使用 IF 查看目录是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28864348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com