Linux 命令行。移动目录中的所有文件和目录,除了一些文件和目录

som*_*ing 8 command-line directory files move

我有一个文件夹,A其中有文件和目录,我想所有的文件和目录移动到另一个文件夹B,除非filefile2directory,和directory2

如何才能做到这一点?

Sté*_*las 11

zsh

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

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

bash

shopt -s extglob dotglob failglob
mv A/!(@(file|directory)?(2)) B/
Run Code Online (Sandbox Code Playgroud)

ksh93

(FIGNORE='@(.|..|@(file|directory)?(2))'; mv A/* B)
Run Code Online (Sandbox Code Playgroud)


Arc*_*mar 10

我通常做什么

cd A
ls > a
Run Code Online (Sandbox Code Playgroud)

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

vi a
Run Code Online (Sandbox Code Playgroud)

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

mv $(<a) B
Run Code Online (Sandbox Code Playgroud)

  • @somethingSomething 此解决方案允许您在执行之前检查您将要执行的操作。不要低估这一点。 (2认同)
  • 由于另一个原因,这可能很危险:如果 `ls` 是 `ls -F` 的别名(这在不使用颜色时很常见),源路径可以有前导 `/`,这可能会产生严重的副作用 - 请参阅“ `info mv`(或 `pinfo mv`,但不在 `man mv` 中)中的警告”和“尾部斜杠” (2认同)

Fal*_*lko 5

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

find . ! -name . -prune ! -path ./file \
                        ! -path ./file2 \
                        ! -path ./directory \
                        ! -path ./directory2 \
     -exec mv {} your_destination \;
Run Code Online (Sandbox Code Playgroud)

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