mv 是我们可以用来移动文件/文件夹的唯一命令吗?

mv 是我们可以用来移动文件/文件夹的唯一命令吗?

这是mv我们可以用来在 Ubuntu 20.04 上移动文件/文件夹的唯一命令吗?

答案1

mv该工具移动文件的方式是让文件的保持不变(除非文件被移动到不同的文件系统)并保留其所有权和权限。其他工具提供不同的选项。cp与 不同,该命令mv在文件系统中创建一个具有新 inode 位置的全新数据对象。

mv无需使用内置命令cp即可模仿动作rm

cp example/foo .
ls -l -G -g --inode
7476869 -rwxrwxr-x. 29545 Aug  2 11:58 foo
rm example/foo

来源:修订自不使用 mv 在 Linux 上移动文件

答案2

mv跨文件系统

  • 复制文件并删除原始文件。

对于文件:

cp source target && rm source

对于目录:

cp -r source target && rm -rf source

mv到同一个文件系统:

  • 创建到您的 inode 的新链接并删除原始链接。

ln因此,您可以使用&&模拟同一文件系统上的移动rm

ln source target && rm source

但是,这仅适用于文件。
要递归移动目录,您可以编写一个小脚本/函数:

#!/bin/bash
lmv()(

  set -eu

  s="$1"
  t="$2"

  if [ -f "$s" ]; then
    printf '%s -> %s\n' "$s" "$t"
    ln "$s" "$t"
    rm "$s"
  elif [ -d "$s" ]; then
    printf '%s -> %s\n' "$s" "$t"
    mkdir "$t"
    shopt -s dotglob
    for e in "$s"/*; do
      lmv "$e" "$t/${e##*/}"
    done
    rmdir "$s"
  else
    >&2 printf 'No file or directory: %s\n' "$s"
    exit 1
  fi
)

用法:

lmv source target

(注意:该脚本仅仅是一个概念证明,缺少一些东西,例如多个来源或保留所有者和权限等。)

相关内容