选项 1:不同的文件管理器

选项 1:不同的文件管理器

在 Windows 操作系统上,当您将文件复制到已经具有同名文件的目录中时,它会询问您是否要:

  1. 复制文件并替换/覆盖现有文件
  2. 取消将新文件复制到目录中
  3. 复制文件,但重命名(例如“filename - copy (1)”)

当我在 Ubuntu 中执行此操作时,我没有第三个选项(很多时候这是一个非常有用的选项)。有什么方法可以在 Ubuntu 中做到这一点吗?

答案1

不幸的是 Nautilus 没有这个选项。

选项 1:不同的文件管理器

您可以尝试其他文件管理器,例如海豚

安装 Dolphin(需要宇宙資料庫)

选项 2:命令行

您也可以使用命令行程序cp(1)使用备份选项:

cp --backup -t DESTINATION SOURCE [SOURCE...]

这具有以下效果,可以通过手册页中描述的其他选项进行控制cp(1)

--backup[=CONTROL]― 备份每个现有的目标文件

-b― 喜欢--backup但不接受论点

-S, --suffix=SUFFIX― 覆盖通常的备份后缀

备份后缀为~,除非使用--suffix或进行设置SIMPLE_BACKUP_SUFFIX。版本控制方法可以通过选项--backupVERSION_CONTROL环境变量进行选择。以下是值:

  • none, off:从不进行备份(即使--backup给出了)
  • numbered, t:进行编号备份
  • existing, nil:如果存在编号备份,则使用编号,否则使用简单
  • simple, never:始终进行简单备份

例子

cp --backup=existing --suffix=.orig -t ~/Videos ~/Music/*

这会将所有文件复制到~/Music~/Videos如果目标中存在同名文件,则通过.orig在其名称后附加 来重命名该文件作为备份。如果存在与备份同名的文件,则通过附加 来重命名备份(.1如果备份也存在)等等.2。只有这样,源文件才会复制到目标。

如果要递归复制子目录中的文件,请使用:

cp -R --backup=existing --suffix=.orig -t ~/Videos ~/Music

答案2

在超级用户上发现这个

#!/bin/bash
cp -vn "$1" "$2"/ || cp -vn "$1" "$2"/"${1##*/}"~"$(md5sum "$1" | cut -f1 -d' ')"

同名文件将被重命名为在名称中添加了 md5sum 的文件。如果您将其保存为“saveCopy”之类的文件名,则可以find像这样执行它:

find . -name 'z*.jpg' -exec ./saveCopy {} /tmp/Extracted/ \;

有关更多信息,请参阅链接。

答案3

之前这个论坛上有针对这个问题的解决方案(ultracopier):参见https://ubuntuforums.org/showthread.php?t=2251859根据该讨论,它可以集成到 Nautilus 中。

答案4

将此脚本复制到顶级目录,使其可执行并运行它:

#!/bin/bash

## Get a list of all files
list=$(find . -mindepth 2 -type f -print)
nr=1

## Move all files that are unique
find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
    mv -n $file ./
done
list=$(find . -mindepth 2 -type f -print)

## Checking which files need to be renamed
while [[ $list != '' ]] ; do
   ##Remaming the un-moved files to unique names and move the renamed files
   find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
       current_file=$(basename $file)
       mv -n $file "./${nr}${current_file}"
   done
   ## Incrementing counter to prefix to file name
   nr=$((nr+1))
   list=$(find . -mindepth 2 -type f -print)
done

相关内容