![Linux 命令行。移动目录中除部分文件和目录之外的所有文件和目录](https://linux22.com/image/55427/Linux%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E3%80%82%E7%A7%BB%E5%8A%A8%E7%9B%AE%E5%BD%95%E4%B8%AD%E9%99%A4%E9%83%A8%E5%88%86%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95.png)
我有一个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 个额外的跨设备副本。