Linux 命令行。移动目录中除部分文件和目录之外的所有文件和目录

Linux 命令行。移动目录中除部分文件和目录之外的所有文件和目录

我有一个A包含文件和目录的文件夹,我想将所有这些文件和目录移动到另一个文件夹B,除了filefile2directorydirectory2

如何才能做到这一点?

答案1

zsh

setopt extendedglob # best in ~/.zshrc
mv A/^(file|directory)(|2)(D) B/

(D)包括(隐藏)文件)。

bash

shopt -s extglob dotglob failglob
mv A/!(@(file|directory)?(2)) B/

ksh93

(FIGNORE='@(.|..|@(file|directory)?(2))'; mv A/* B)

答案2

我通常做什么

cd A
ls > a

(假设您没有“a”文件)。

vi a

删除要保留的任何文件或目录。

mv $(<a) B

答案3

您可以find与排除的表达式一起使用:

find . ! -name . -prune ! -path ./file \
                        ! -path ./file2 \
                        ! -path ./directory \
                        ! -path ./directory2 \
     -exec mv {} your_destination \;

该解决方案的灵感来自这个问题

答案4

如果./A./B位于同一文件系统上如果这些文件尚不存在于./B

file file2 directory directory2

...那么这个操作应该是原子的:

cd ./A; mv * ../B
for mv in file file2 directory directory2
do mv ../B/"$mv" .
done

如果不是,那么有至少使用上述命令集完成 8 个额外的跨设备副本。

相关内容