我正在尝试将一些DIR从一个位置移动到另一个位置,但是我需要将一个Dirs移至适当的位置(所有文件都将保留在适当的位置)。我已经尝试了几件事,但似乎没有任何作用。我已经测试了dir_count的值,并且可以按预期工作。但是,当在有条件或案例语句中使用时,它无法按预期工作。
有条件
#!/bin/bash
DIR_COUNT=$(find path/to/dir/*[^this_dir_stays_put] -type d -maxdepth 0 | wc -l)
echo $DIR_COUNT
if [[ $DIR_COUNT > 0 ]]
then
find path/to/dir/*[^this_dir_stays_put] -type d -maxdepth 0 -exec mv {} new/location ;
echo "Moving dirs."
else
echo "No dirs to move."
fi
案例
#!/bin/bash
DIR_COUNT=$(find path/to/dir/*[^this_dir_stays_put] -type d -maxdepth 0 | wc -l)
echo $DIR_COUNT
case $DIR_COUNT in
0)
echo "No dirs to move."
*)
echo "Moving dirs."
find path/to/dir/*[^this_dir_stays_put] -type d -maxdepth 0 -exec mv {} new/location ;;;
esac
使用两个版本的代码,一切都很好,只要存在要移动的目录,但是如果没有任何移动,我就会有问题。
有条件
$ sh script.sh
find: find path/to/dir/*[^this_dir_stays_put]: No such file or directory
0
No dirs to move.
案例
$ sh script.sh
find: find path/to/dir/*[^this_dir_stays_put]: No such file or directory
0
Moving dirs.
find: find path/to/dir/*[^this_dir_stays_put]: No such file or directory
跳过条件和案例语句。
find path/to/dir/* ! -name 'this_dir_stays_put' -type d -maxdepth 0
-exec mv {} new/location ;
我假设您有类似的东西:
dir_a
dir_b
dir_c
dir_d
dir_e
您想移动除dir_c
以外的所有目录。
有时最简单的方法是将所有目录移动到新位置,然后将您想要的一个目录移回新位置。否?
好吧,如果您使用Kornshell
,这很简单。如果使用Bash
,则需要首先设置这样的extglob
选项:
$ shopt -s extglob
现在,您可以使用扩展的地球语法来指定目录异常:
$ mv !(dir_c) $new_location
!(dir_c)
匹配除dir_c
以外的所有文件。这在Kornshell中起作用。它在bash中起作用,但前提是您首先设置extglob
。