Скопіюйте файли з перейменуванням


28

У мене величезне дерево файлів. Деякі файли мають однакове ім'я, але в іншому випадку, наприклад, some_code.cта Some_Code.c.

Тому коли я намагаюся скопіювати його у файлову систему NTFS / FAT, він запитує мене про те, чи хочу я його замінити файл чи пропустити його.

Чи є спосіб автоматично перейменувати такі файли, наприклад, додавши  (1)до імені файлу конфлікту (як це робить Windows 7)?


Цікавий. Я просто хотів побачити, яку помилку я отримую, якщо спробую створити файл з тим самим іменем на NTFS-розділі (відповідно до HPFS / NTFS sudo fdisk -l /dev/sda), і зробив touch foo; touch Fooі закінчився двома файлами fooта Foo. Але мені не цікаво одно перезавантажувати Windows, щоб подивитися, як вони виглядають там. Migth це просто проблема FAT? Ах - у мене є USB-накопичувач з FAT, і я міг би створити FAT-систему всередині файлу, ... - будь-яку хвилину, будь ласка. :)
користувач невідомий

Відповіді:


41

Багато інструменти GNU , такі як cp, mvі tarпідтримка створення резервних копій файлів , коли мета існує. Тобто, при копіюванні 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
Блискуча. Я не знав, що такий варіант існує, і він виявився надзвичайно корисним. Дякую @Gilles
Стів Хілл

2
У OSX cp немає - прапор резервного копіювання. використовувати, brew install coreutilsа потім використовувати команду gcpзамість цього.
Вестон Гангер

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, де використовується для різкого обмеження кількості файлів, на які впливає. Я не перевіряв сценарій на більш глибокі структури файлів, а також на пробіли у файлах файлів та інших, прикольних символів, таких як linefeed, pagefeed тощо.

Я використовував .1, оскільки це не створює проблем у більшості команд, тоді як (і a) часто потрібно маскування.



0

cpПринаймні, не з GNU .

Настійно радимо не мати дублюючих імен файлів (ігноруючи регістр), вони просто заподіють вам світ. Знайдіть список таких дублікатів, використовуючи

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

Потім вручну перейменуйте один із файлів для кожного рядка, якщо виводиться. Намагайтеся уникати дублікатів у майбутньому.


Хлопець ніколи не припускав, що він той, хто створив цей безлад.
thepang

Ну так, правда, але він є тим, хто страждає від наслідків ☺
jmtd

У мене ситуація, коли я закінчився резервними копіями з трохи інших часів. Хочете поєднувати їх, але не клобувати різні версії. Наприклад, наскільки я знаю, старший може бути кращим. Можу сказати лише після того, як я огляну. Тим часом потрібно скопіювати та перейменувати резервні копії.
abalter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.