- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如果 $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对我帮助很大。
如果目标中不存在目录,则将目录从源移动到目标:
为了便于阅读,我将把你的 DIR1
和 DIR2
称为 src
和 dest
。首先,让我们声明它们:
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/
我是一名优秀的程序员,十分优秀!