AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 451081
Accepted
Black
Black
Asked: 2018-06-22 03:59:14 +0800 CST2018-06-22 03:59:14 +0800 CST 2018-06-22 03:59:14 +0800 CST

如何将文件夹的内容移动到当前文件夹?

  • 772

我有这个文件夹结构:

foo
`----> bar

如何提取barinto的内容foo?

mv -f bar/* .我从内部尝试过foo。

-f,--强制 | 覆盖前不要问

但我得到“无法移动bar/ajax到,foo/ajax因为目录不为空”

我该如何解决这个问题?

cp mv
  • 5 5 个回答
  • 21196 Views

5 个回答

  • Voted
  1. Best Answer
    muru
    2018-07-06T02:58:21+08:002018-07-06T02:58:21+08:00

    mv会覆盖文件,但会拒绝覆盖目录。没有一个命令可以合并目录并删除源目录(这可能是您想要的mv)。甚至rsync --remove-source-files会留下空目录。

    您可以使用命令组合:

    cp -a dev/. .
    rm -r dev
    

    它将所有内容复制dev到当前目录,然后删除该dev目录。

    或者:

    rsync -a --remove-source-files dev/ .
    find dev -depth -type d -exec rmdir {} \;
    

    它用于rsync移动所有文件,然后删除留下的空目录。

    • 18
  2. kemotep
    2018-07-06T03:08:43+08:002018-07-06T03:08:43+08:00

    手头的问题

    您希望将内容foo/bar/向上移动到foo/.

    我将在解决方案中引用超级用户的这篇文章以及来自 serverfault的这篇文章。

    解决方案

    根据用户 Stephan202,您正在寻找以下命令来执行此任务:

    cd /path/to/foo/bar
    mv * .[^.]* ..
    

    也应该可以从内部foo/bar/运行以下命令:

    (shopt -s dotglob; mv -- * ..)
    

    验证您也具有正确的权限。如果需要,使用 root(sudo) 权限运行命令。

    结论

    如果您对此答案有任何疑问或问题,请发表评论。我强烈建议您在尝试命令之前通读我提供的每个链接。我感谢反馈以纠正任何误解并改进我的帖子。我可以根据需要更新我的答案。

    祝你好运!

    • 2
  3. user286944
    2018-07-06T09:25:07+08:002018-07-06T09:25:07+08:00

    编辑:我修改了这个答案以表明利弊。

    一些手册页相当简洁,因为相应的信息手册中提到了这些信息。

    男人

    -f,--强制

           覆盖前不提示

    信息

            注意: mv只会替换目标中的空目录。使用诊断跳过冲突的填充目录。

    [...]

    -f,-- 强制

           如果目标文件存在但通常不可写,标准输入是终端,并且没有给出-for选项,提示用户是否替换文件。(您可能拥有该文件,或者对其目录具有写入权限。)如果响应不是肯定的,则跳过该文件。--forcemv

    mv不能替换非空目录,但可以覆盖用户拥有的现有文件,这些文件通常是不可写的(所有者没有写权限,参见引用)。

    foo    
    |-- ajax
    `-- bar
        `-- ajax
    

    您可以合并目录foo/ajax并保留所有文件或覆盖@murufoo/bar/ajax建议的相同文件。

    但是,如果这些目录的内容不相关,则此方法不适用。乍一看可能并不明显,所以让我们看看一棵新树。

    prompt% tree home/network
    home/network/
    ├── data
    │   ├── img
    │   │   └── demo.png
    │   └── src
    │       ├── contact.pdf
    │       └── report.pdf
    ├── hardware
    │   ├── api
    │   ├── docs
    │   └── src
    │       └── driver.c
    ├── misc
    │   └── src
    │       └── init.py
    ├── README
    └── src
        ├── main.c
        └── manager.c
    

    我们可以将内容network/data移入network并选择合并具有相同名称的目录(参见下文)。

    prompt% cp -ab home/network/data/* home/network
    prompt% rm -r home/network/data/*
    prompt% tree home/network
    home/network/
    ├── data
    ├── hardware
    │   ├── api
    │   ├── docs
    │   └── src
    │       └── driver.c
    ├── img
    │   └── demo.png
    ├── misc
    │   └── src
    │       └── init.py
    ├── README
    └── src
        ├── contact.pdf
        ├── main.c
        ├── manager.c
        └── report.pdf
    

    如我们所见,最终目录network/src可能包含移动后不相关的文件。如果不希望,我们可以在移动后重命名具有相同名称的文件和目录。

    prompt% mv -b -S "_data" home/network/data/* home/network
    prompt% tree home/network
    home/network/
    |-- README
    |-- data
    |-- hardware
    |   |-- api
    |   |-- docs
    |   `-- src
    |       `-- driver.c
    |-- lib
    |   `-- demo.png
    |-- misc
    |   `-- src
    |       `-- init.py
    |-- src
    |   |-- contact.pdf
    |   `-- report.pdf
    `-- src_data
        |-- main.c
        `-- manager.c
    
    • 1
  4. ctrl-alt-delor
    2018-07-06T10:15:49+08:002018-07-06T10:15:49+08:00

    如果您有一个foo 只包含一个目录的目录bar。(bar可能包含其他东西)。

    并且您想重命名foo/bar→ foo,然后执行:

    mv -T foo foo.original
    mv -T foo.original/bar foo
    rmdir foo.original
    

    -T如果您mv没有此选项,您可以离开,但这样会更安全。

    • 0
  5. Jean-Paul Sabatier
    2018-06-22T04:03:36+08:002018-06-22T04:03:36+08:00

    只需使用移动命令:

    cd foo
    mv bar/* .
    

    正如 Jeff Schaller 建议的那样,使用

     shopt -s dotglob 
    

    在 mv 命令之前移动隐藏文件并使用-imv 选项,如果您想要在覆盖之前进行交互式检查

    • -2

相关问题

  • 如何为 bash 命令每行读取多个参数?

  • 如何复制具有相对重复符号链接的目录树?

  • Ubuntu 16.04:以 `~/*` 作为目标错误地执行了 `mv`,无法理解结果

  • cp 在 . (dot) 或 .. (dot dot) 是源目录

  • 如何 mv .bin bin

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve