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

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

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

我已尝试过mv *,但此命令也会移动文件夹。

答案1

如果要将除目录之外的所有内容从 移动$SOURCE_DIR$TARGET_DIR,可以使用以下命令:

find "$SOURCE_DIR" -maxdepth 1 -not -type d -exec mv -t "$TARGET_DIR" -- '{}' +

详细解释:

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

答案2

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

find . -type f -exec mv {} $TARGET \;

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


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

find . -maxdepth 1 -type f -exec mv {} $TARGET \;

答案3

如果您使用的是 zsh 而不是 bash,您可以执行以下操作:

mv "$SOURCE"/*(.) "$TARGET"

最后的(.)称为 glob 限定符;.里面的具体含义是只匹配常规文件。

执行 既mv *(.) "$target"快速又实用。但是,如果您将此作为脚本的一部分执行,则可能需要考虑编写类似 Frxstrem 和 David Forester 建议的内容,mv -t "$target" -- *(.)以更好地处理其他人使用时可能出现的极端情况。

答案4

要将目录之外的所有内容从source-dir一个目录移动到destination-dir另一个目录,在 Python 中:

#!/usr/bin/env python3
"""Usage: mv-files <source-dir> <destination-dir>"""
import shutil
import sys
from pathlib import Path

if len(sys.argv) != 3:
    sys.exit(__doc__)  # print usage & exit 1
src_dir, dest_dir = map(Path, sys.argv[1:])
for path in src_dir.iterdir():
    if not path.is_dir():
        shutil.move(str(path), str(dest_dir / path.name))

在终端中运行 Python 文件

相关内容