Skopiuj pliki ze zmianą nazwy


28

Mam ogromne drzewo plików. Niektóre pliki mają taką samą nazwę, ale w innym przypadku, na przykład, some_code.ci Some_Code.c.

Więc kiedy próbuję skopiować go do systemu plików NTFS / FAT, pyta mnie, czy chcę go zastąpić, czy pominąć.

Czy istnieje sposób na automatyczną zmianę nazw takich plików, na przykład poprzez dodanie  (1)do nazwy pliku konfliktu (tak jak robi to system Windows 7)?


Ciekawy. Chciałem tylko zobaczyć, jaki rodzaj błędu dostaję, gdy spróbuję utworzyć plik o tej samej nazwie na partycji NTFS (zgodnie z HPFS / NTFS, zgodnie z sudo fdisk -l /dev/sda) i zrobiłem touch foo; touch Fooi zakończyłem z 2 plikami fooi Foo. Ale nie jestem ciekawy, czy mogę zrestartować system Windows i sprawdzić, jak tam wyglądają. Czy to tylko problem z FAT? Ach - mam pamięć USB z FAT i mogę utworzyć system FAT w pliku, ... - chwileczkę. :)
użytkownik nieznany

Odpowiedzi:


41

Wiele narzędzi GNU, takie jak cp, mvi tarobsługuje tworzenia kopii zapasowych plików, gdy istnieje cel. Oznacza to, że podczas kopiowania foodo bar, jeśli istnieje już plik o nazwie bar, istniejący bar zostanie przemianowany, a po skopiowaniu barbędzie zawierał zawartość foo. Domyślnie barnazwa zostaje zmieniona na bar~, ale zachowanie można zmodyfikować:

                                # 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)

Istnieją inne warianty, takie jak tworzenie numerowanych kopii zapasowych tylko wtedy, gdy już istnieje. Więcej informacji znajduje się w instrukcji Coreutils .


1
Znakomity. Nie wiedziałem, że ta opcja istnieje i po prostu okazała się niezwykle przydatna. Dzięki @Gilles.
Steve Hill

2
OSX cp nie ma flagi --backup. użyj, brew install coreutilsa następnie użyj polecenia gcpzamiast tego.
Weston Ganger,

6

próbowałem

apropos copy | grep "(1)" 

znaleźć potencjalnych kandydatów i pojawiła się mcopy.

man mcopy 

pokazuje obiecującą opcję, czy -D clash-optionto nie jest fajne? Ale nie tak fajnie - nie jest to opisane. Ale jest kilka wskazówek do mtools.dvi, które przeszukałem w moim systemie, bez powodzenia, i za pośrednictwem google, bez powodzenia, ale potem, z google, szukałem bezpośrednio mcopy clash-optioni znalazłem tę stronę .

Zrobiłem krótki test

mcopy -D A f* a 

do testów dla autorename i targetdir a- zamiast automatycznego nazwania poprosił mnie o to, aby każdy plik zignorował lub zastąpił ten głupi s ...

Moja wersja jest, mtools-4.0.10a strona pomocy pochodzi z 1996 r. - 15 lat. Czy w międzyczasie powinniśmy naprawdę stracić niektóre funkcje?

Dzieliłbym pracę na dwa etapy:

  • Wykonaj krótką funkcję, która generuje unikalną nazwę pliku, jeśli ta nazwa jest zajęta.
  • Uruchom findi uruchom ten skrypt dla każdego pliku, który chcesz skopiować.

Czy powinniśmy pomóc w takim podejściu? :)

Oto skrypt do automatycznego zmieniania nazw plików:

#!/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} 

i to jest moje wywołanie testowe:

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

Uwaga: -maxdepth, -name i -type są używane do radykalnego ograniczenia liczby plików, których dotyczy problem. Nie testowałem skryptu pod kątem głębszych struktur plików ani spacji w nazwach plików i innych funkowych znakach, takich jak linefeed, pagefeed i tak dalej.

Użyłem .1, ponieważ nie sprawia problemów w większości poleceń, podczas gdy (i a) często wymagają maskowania.



0

Przynajmniej nie z GNU cp.

Zdecydowanie zaleca się, aby nie mieć zduplikowanych nazw plików (ignorowanie wielkości liter), ponieważ spowodują one świat bólu. Znajdź listę takich duplikatów za pomocą

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

Następnie ręcznie zmień nazwę jednego z plików dla każdego wiersza, jeśli dane wyjściowe. Staraj się unikać tworzenia duplikatów w przyszłości.


Facet nigdy nie sugerował, że to on stworzył ten bałagan.
tshepang

Cóż, tak, prawda, ale to on
ponosi

Mam sytuację, w której skończyłem z kopiami zapasowymi z nieco innych czasów. Chcesz je połączyć, ale nie blokować różnych wersji. Na przykład, o ile wiem, starszy może być lepszy. Mogę powiedzieć tylko po zbadaniu. W międzyczasie musisz skopiować kopie zapasowe i zmienić ich nazwę.
abalter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.