[linux] hoe move ik een zooi files zonder overwriten?

Pagina: 1
Acties:

  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Heb twee dirs, ergens/dir1 en ergens/dir2. In dir1 staan een hele hoop subdirs met files. In dir2 staan sommige van die files en dirs. Nu wil ik alles uit dir1 naar dir2 moven, behalve degene die al in dir2 staan. Dus zonder te overwriten.
Ik heb het volgende geprobeerd vanuit dir1:

mv --reply=no * ../dir2

Maar dat werkt niet, want dan zeurt hij dat hij dirs die in dir1 zitten die al in dir2 voorkomen, niet kan overschrijven. Zal te maken hebben met dat hij denkt dat ik ook dirs wil moven? (hij mag van mij na het moven van de nodige files best lege of bijna lege dirs in dir1 laten staan)

Ik kan ook niet -u gebruiken, want de files in dir1 zijn nieuwer (en toch wil ik die uit dir2 laten staan).

Iemand enig idee?

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 23:05

Cyphax

Moderator LNX
Even de man-page erbij..
mv [OPTION]... SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... --target-directory=DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-f, --force do not prompt before overwriting
equivalent to --reply=yes
-i, --interactive prompt before overwrite
equivalent to --reply=query
--reply={yes,no,query} specify how to handle the prompt about an
existing destination file
--strip-trailing-slashes remove any trailing slashes from each SOURCE
argument
-S, --suffix=SUFFIX override the usual backup suffix
--target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
-u, --update move only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, --verbose explain what is being done
--help display this help and exit
--version output version information and exit

The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:

none, off never make backups (even if --backup is given)
numbered, t make numbered backups
existing, nil numbered if numbered backups exist, simple otherwise
simple, never always make simple backups
Weet je zeker dat het niet lukt met die --reply, eventueel gecombineerd met een andere optie zoals -u?

Wat is overigens het probleem met --reply=no? Houdt ie gewoon op als ie iets tegen komt dat al bestaat? Dat ie een melding geeft dat ie iets niet kan overschrijven zal niet zo'n probleem zijn toch?

[ Voor 12% gewijzigd door Cyphax op 04-04-2005 18:04 ]

Saved by the buoyancy of citrus


  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Cyphax schreef op maandag 04 april 2005 @ 17:59:
Volgens mij moet je daar met de man page wel uit kunnen komen. :)
Dat had ik al geprobeerd :)
die --reply kon weleens handig zijn
Dacht ik ook, maar:
--reply=no zeurt over dirs die hij niet wil overschrijven (en dat hoef ik ook niet, alleen dirs die niet bestaan of files die nog niet bestaan in bestaande dirs wil ik gekopieerd hebben, maar hoe krijg ik hem dat aan z'n verstand?)
--reply=yes wil ik niet, hij moet bestaande files juist niet overschrijven
--reply=query wil ik ook niet, want het gaat om meer dan 20.000 files ;(

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 23:05

Cyphax

Moderator LNX
JaceTBL schreef op maandag 04 april 2005 @ 18:04:
[...]

Dat had ik al geprobeerd :)
Ja, sorry, ik riep iets te vlug... :)
Dacht ik ook, maar:
--reply=no zeurt over dirs die hij niet wil overschrijven (en dat hoef ik ook niet, alleen dirs die niet bestaan of files die nog niet bestaan in bestaande dirs wil ik gekopieerd hebben, maar hoe krijg ik hem dat aan z'n verstand?)
--reply=yes wil ik niet, hij moet bestaande files juist niet overschrijven
--reply=query wil ik ook niet, want het gaat om meer dan 20.000 files ;(
Wat is dat "zeurt over dirs" dan precies? Als ie klaagt dat een dir niet overschreven kan worden, en vervolgens doorgaat is er niets aan de hand, toch?

Saved by the buoyancy of citrus


  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Cyphax schreef op maandag 04 april 2005 @ 17:59:
Weet je zeker dat het niet lukt met die --reply, eventueel gecombineerd met een andere optie zoals -u?
Ik zou niet weten hoe, dat is juist mijn vraag :)

Wat ik begrijp van -u doet dat in ieder geval niet wat ik wil, van de dubbele files zijn degene in dir2 ouder dan die in dir1, maar toch wil ik die niet overschrijven.
Wat is overigens het probleem met --reply=no? Houdt ie gewoon op als ie iets tegen komt dat al bestaat? Dat ie een melding geeft dat ie iets niet kan overschrijven zal niet zo'n probleem zijn toch?
mv: cannot overwrite directory '../dir2/subdir1'
mv: cannot overwrite directory '../dir2/subdir2'
mv: cannot overwrite directory '../dir2/subdir3'
etc... :'(

  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Cyphax schreef op maandag 04 april 2005 @ 18:07:
Wat is dat "zeurt over dirs" dan precies? Als ie klaagt dat een dir niet overschreven kan worden, en vervolgens doorgaat is er niets aan de hand, toch?
Ja klopt, maar na het "zeuren over een dir" (zie boven) moved hij de inhoud ook niet meer, ook als daar files tussen zitten die nog niet onder dir2 staan.

(edit) alle dirs hebben overigens 777

[ Voor 8% gewijzigd door Jace / TBL op 04-04-2005 18:10 ]


  • spone
  • Registratie: Mei 2002
  • Niet online
Als ik het goed begrijp zoek je een "nee op alles" als ie vraagt 'vervangen of niet' idee?

Desktop: i5-14600K, 32GB DDR5-6000, RTX 5070 Ti; Laptop: MacBook Pro M1 Pro 14" 16/512; Server: R9-7950X, 192GB DDR5-5600


  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
spone schreef op maandag 04 april 2005 @ 18:14:
Als ik het goed begrijp zoek je een "nee op alles" als ie vraagt 'vervangen of niet' idee?
Klopt. Maar als bijvoorbeeld deze files bestaan:
dir1/subdir1/file1
dir1/subdir1/file2
dir2/subdir1/file1
wil ik wel dat hij die file2 naar dir2/subdir1 moved. Dus niet dat hij denkt "oh, subdir1 bestaat al, dus die move ik niet (en de inhoud dus ook niet)". De inhoud wel graag (voor zover die niet ook al bestaat natuurlijk).

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
edit : In 1e instantie verkeerd begrepen, maar dan iets in de trant van
find . > /tmp/dir1.txt
find /dir2/. > /tmp/dir2.txt
diff /tmp/dir1.txt /tmp/dir2.txt > /tmp/dir3.txt
mv < /tmp/dir3.txt /dir2/

die huidige move functie is sowieso fout en voor de diff functie moet je maar even op de manpages kijken, want je kan 1 bestand als hoofdbestand opgeven, maar heb op dit moment geen linux shell tot mijn beschikking dus is beetje erge pseudo-code

[ Voor 72% gewijzigd door Gomez12 op 04-04-2005 18:27 ]


  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Fok, en het klinkt toch zo simpel :'(

Screw dit, ik move wel gewoon alles van dir2 naar dir1 met overschrijven, en dan heb ik in dir1 wat ik wil :)

  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Gomez, het risico aan diff lijkt mij dat die dirs en files in dir1 en dir2 in verschillende volgorde staan?

  • kim72
  • Registratie: Oktober 2001
  • Laatst online: 07-02 18:12
Je kan natuurlijk ook dir1 over dir2 heen kopieren (misschien eerst een backup van dir1 maken?) en dan wel alles overschrijven.
Ben benieuwd of dat wel werkt.

  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
(dir2 over dir1 bedoel je?)
Maar helaas, daar is het te groot voor :'(


Verder krijg ik *vloek* met het moven van dir2 naar dir1 met overschrijven (dus --reply=yes of -f) hetzelfde probleem!? Wat is dat met dat mv commando, snap ik het nou niet, of wil ik gewoon iets onmogelijks..??

[ Voor 112% gewijzigd door Jace / TBL op 04-04-2005 18:54 ]


  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 08-02 23:13

jvhaarst

Eendracht maakt macht

Is rsync voor jou niet een stuk eenvoudiger ?

If you don’t have enough time, stop watching TV.


Verwijderd

Staat midnight commander geinstalleerd? =linux clone van good-old MSDOS Norton commander

[ Voor 39% gewijzigd door Verwijderd op 04-04-2005 19:15 ]


  • Sendy
  • Registratie: September 2001
  • Niet online
En met recursive? Misschien vanuit de echte directory? mv -r dir1/ dir2/..

Test je dit wel op een testdir?

Find kan natuurlijk ook: find alle files en dirs in de eerste directory die niet in de tweede zitten en kopieer die. Maar ik heb nu geen zin om dat uit te zoeken.

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

als
code:
1
find dir1 -type f | perl -ne 'chop; s/dir1//; print "mv dir1$_ dir2$_\n" unless ( -e "dir2$_") ;'

iets zinnigs print kan je het naar een bestandje sturen ( >bla.txt ), chmodden en uitvoeren.

Whenever you find that you are on the side of the majority, it is time to reform.

Pagina: 1