我不需要移动文件夹,只需移动文件。
我已尝试过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 替换为您的目标目录路径。如果您想复制文件,请将其替换mv
为cp
。
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))