将所有目录移动到另一个文件夹以外的所有目录,如果它们存在,则将所有文件抛在后面



我正在尝试将一些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

相关内容

  • 没有找到相关文章