我有一个A
包含文件和目录的文件夹,我想将所有这些文件和目录移动到另一个文件夹B
,除了file
、file2
、directory
和directory2
。
如何才能做到这一点?
答案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 个额外的跨设备副本。