复制文件并重命名


28

我有一棵巨大的文件树。某些文件具有相同的名称,但大小写不同,例如some_code.cSome_Code.c

因此,当我尝试将其复制到NTFS / FAT文件系统时,它会询问我是要替换文件还是跳过文件。

是否有任何方法可以自动重命名此类文件,例如,通过添加 (1)冲突文件的名称(如Windows 7一样)?


好奇。我只是想看看,如果我尝试在NTFS分区(根据HPFS / NTFS,根据sudo fdisk -l /dev/sda)上产生一个具有相同名称的文件,并touch foo; touch Foo以2个文件foo和结尾,则会出现什么样的错误Foo。但是我不奇怪重启Windows来看看它们在那儿的样子。难道这只是一个FAT问题?啊-我有一个带FAT的USB-Stick,可以在文件内创建FAT系统,...-请稍等。:)
用户未知,

Answers:


41

许多GNU工具,如cpmvtar支持创建备份文件时的目标存在。也就是说,在复制foo到时bar,如果已经存在一个名为的文件bar,则现有 文件bar将被重命名,并且复制bar后将包含的内容foo。默认情况下,bar被重命名为bar~,但是可以修改其行为:

                                # If a file foo exists in the target, then…
cp -r --backup source target    #   rename foo → foo~
cp -r --backup=t source target  #   rename foo → foo.~1~ (or foo.~2~, etc)

还有其他变体,例如仅在已经存在的情况下创建编号备份。有关更多详细信息,请参见coreutils手册


1
辉煌。我不知道这个选项的存在,它只是被证明是非常有用的。谢谢@吉尔斯。
史蒂夫·希尔

2
OSX cp没有--backup标志。使用brew install coreutils,然后改用命令gcp
Weston Ganger

6

我试过了

apropos copy | grep "(1)" 

找到可能的候选人,然后出现了mcopy。

man mcopy 

显示一个有前途的选择-D clash-option不是很酷吗?但不是很酷-没有描述。但是有一些关于mtools.dvi的提示,我在系统上进行搜索但没有成功,并且通过google进行了搜索,但没有成功,但是随后我使用google直接搜索mcopy clash-option找到了该站点

我做了一个简短的测试

mcopy -D A f* a 

测试自动重命名和targetdir- a不是自动重新命名,而是要求我忽略或覆盖每个文件,而是那个愚蠢的s ...。

我的版本是mtools-4.0.10,帮助页面从1996年开始-15岁。同时,我们真的应该失去一些功能吗?

我将工作分为两个步骤:

  • 做一个简短的函数,如果该名称被占用,它将为文件生成一个唯一的名称。
  • 运行find,然后对要复制的每个文件执行该脚本。

我们可以协助这种方法吗?:)

这是一个自动重命名文件的脚本:

#!/bin/bash

name=$1
target=$2

autorename () {
name=$1
target=$2
no=$3 

test -e ${target}/${name}.$no && autorename ${name} ${target} $((no+1)) || cp ${name} ${target}/${name}.$no 

}

test -e ${target}/${name} && autorename ${name} ${target} 0 || cp ${name} ${target} 

这是我的测试调用:

find -maxdepth 1 -name "fo*" -type f -exec ./autorename.sh {} /mnt/hidden/test/a ";"

注意:-maxdepth,-name和-type用于极大地限制受影响的文件数量。我没有测试脚本是否具有更深的文件结构,也没有测试文件名中的空格以及其他诸如换行,换页等时髦字符。

我使用.1是因为它在大多数命令中都不会造成麻烦,而(和a)通常需要屏蔽。



0

cp至少不是GNU 。

强烈建议您不要使用重复的文件名(忽略大小写),它们只会使您感到痛苦。使用以下内容查找此类重复项的列表

find . | tr A-Z a-z | sort | uniq -d

然后,如果输出,则为每行手动重命名文件之一。尽量避免在将来创建重复项。


这个家伙从来没有暗示过他就是那个烂摊子。
tshepang 2011年

好吧,是的,没错,但是他是遭受后果consequences的人
jmtd

我遇到的情况是我最终获得了略有不同时间的备份。要合并它们,但不要破坏不同的版本。例如,据我所知,较老的可能更好。我检查后只能说出来。同时,需要复制和重命名备份。
abalter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.