如何仅将当前文件夹中的文件移动到子文件夹?

Arc*_*it 9 command-line files mv

我不必移动文件夹,只需移动文件。

我试过了,mv *但这个命令也会移动文件夹。

Frx*_*rem 13

如果你想,除了从目录都移动$SOURCE_DIR$TARGET_DIR,你可以使用这个命令:

find "$SOURCE_DIR" -maxdepth 1 -not -type d -exec mv -t "$TARGET_DIR" -- '{}' +
Run Code Online (Sandbox Code Playgroud)

详细解释:

  • find: find 搜索目录中的文件
  • $SOURCE_DIR: 要搜索的目录
  • -maxdepth 1: 不要看子目录里面
  • -not -type d: 忽略目录
    • -type f如果您只想复制严格意义上的文件,您也可以使用,但我更喜欢上面的内容,因为它还可以捕获既不是文件也不是目录的所有内容(特别是符号链接)
  • -exec mv -t "$TARGET_DIR" -- '{}' +:运行所有匹配文件mv -t "$TARGET_DIR" -- FILES...所在的命令FILES...(感谢@DavidFoerster)

  • `find ... -exec mv -t "$TARGET_DIR" -- '{}' +` 会更安全(如果 `$TARGET_DIR` 不是目录或者匹配以 `-` 开头)并且更高效(因为它不会为每个匹配的文件生成一个新的子进程)。 (2认同)

Ema*_*sad 5

我认为您只想 mv 您的文件。首先转到您的目录并使用此命令,将 $TARGET 替换为您的目标目录路径。如果要复制文件,请替换mvcp.

find . -type f -exec mv {} $TARGET \;
Run Code Online (Sandbox Code Playgroud)

如果我解释一下,这find . -type f意味着选择所有文件并-exec mv {} $TARGET \;意味着mv对所有选定项目执行命令。


上一个答案有一个错误..它也mv包含子目录中的所有文件。快速修复是使用-maxdepth 1。然后它不会mv在子目录中递归文件。下面是正确的..

find . -maxdepth 1 -type f -exec mv {} $TARGET \;
Run Code Online (Sandbox Code Playgroud)