unix mv –backup = numéroté

J’essaie en php de déplacer un dossier mais de garder les deux fichiers dans le dossier dest s’il existe un doublon. J’ai essayé de le faire en récursivité mais c’est trop compliqué tant de choses peuvent mal se passer, par exemple des prémissions de fichiers et des fichiers \ dossiers en double.

im essayant de travailler avec la commande system () et je ne peux pas comprendre comment déplacer des fichiers mais garder la sauvegarde si dupliquer sans détruire l’extension

$last_line = system('mv --backup=t websites/test/ websites/test2/', $retval); 

donne le texte suivant si le fichier existe dans les deux répertoires:

 ajax.html~ ajax.html~1 ajax.html~2 

ce que je cherche c’est:

 ajax~.html ajax~1.html ajax~2.html 

ou tout autre comme (1), (2) … mais sans ruiner l’extension du fichier. des idées? S’il vous plaît.

ps doit utiliser la commande system ().

Si vous souhaitez conserver les fichiers originaux et simplement créer une copie, utilisez cp not mv .

Si vous voulez créer une archive de sauvegarde, faites un gzip tar du dossier comme ceci

tar -pczf name_of_your_archive.tar.gz /path/to/directory/to/backup

 rsync --ignore-existing --remove-source-files /path/to/source /path/to/dest 

Utilisez rsync avec les --backup et --backup-dir . par exemple:

 rsync -a --backup --backup-dir /usr/local/backup/2013/03/20/ /path/to/source /path/to/dest 

Chaque fois qu’un fichier peut être écrasé, il est copié dans le dossier indiqué, plus le chemin d’access à cet élément. par exemple: /path/to/dest/path/to/source/file.txt

Du sharepoint vue des choses, il ne semble pas y avoir de méthode intégrée pour sauvegarder des fichiers tout en conservant l’extension au bon endroit. Cela pourrait être faux, mais je n’ai pas pu en trouver un qui ne correspond pas à votre question initiale.

Puisque vous avez dit qu’il est compliqué de copier les fichiers en utilisant php, vous pouvez peut-être le faire de la même façon que vous le faites maintenant, en obtenant les fichiers au format

 ajax.html~ ajax.html~1 ajax.html~2 

Ensuite, utilisez PHP pour parsingr les fichiers et les renommer au format souhaité. De cette façon, vous ne devrez pas gérer les permissions et les fichiers en double, qui sont des complications que vous avez mentionnées. Il vous suffit de rechercher des fichiers avec ce format et de les renommer.

Je ne réponds pas ssortingctement à votre question, mais le cas que je présente ici est très courant et donc valide!

Voici mon hack!

UTILISER AVEC DES FICHIERS:

 #!/bin/bash # It will find all the files according to the arguments in # "" ("find" command) and move them to the # "" folder. Files with the same name will follow the pattern: # "same_name.ext", "same_name (1).ext", "same_name (2).ext", # "same_name (3).ext"... cd  mkdir ./ find ./ -iname "" -type f -print0 | xargs -0 -I "{}" sh -c 'cp --backup=numbered "{}" ".//" && rm -f "{}"' cd ./ for f_name in *.~*~; do f_bak_ext="${f_name##*.}" f_bak_num="${f_bak_ext//[^0-9]/}" f_orig_name="${f_name%.*}" f_only_name="${f_orig_name%.*}" f_only_ext="${f_orig_name##*.}" mv "$f_name" "$f_only_name ($f_bak_num).$f_only_ext" done cd .. 

UTILISER AVEC DES DOSSIERS:

 #!/bin/bash # It will find all the folders according to the arguments in # "" ("find" command) and move them to the # "" folder. Folders with the same name will have their contents # merged, however files with the same name WILL NOT HAVE DUPLICATES (example: # "same_name.ext", "same_name (1).ext", "same_name (2).ext", # "same_name (3).ext"...). cd  find ./ -path "./" -prune -o -iname "" -type d -print0 | xargs -0 -I "{}" sh -c 'rsync -a "{}" ".//" && rm -rf "{}"'