GNU/Linux >> Tutoriels Linux >  >> Linux

Diviser et fusionner - avec des DVD ! ?

Supposons que j'ai un gros fichier appelé foo.tar.xz .
J'ai divisé le fichier en parties d'un peu moins de 4,7 Go chacune, en utilisant split -b 4689887232 foo.tar.xz foo.tar.xz. , ce qui me donne des fichiers nommés foo.tar.xz.aa , foo.tar.xz.ab , etc.
Ensuite, j'écris chaque fichier sur un DVD différent et je l'envoie à Alice à l'aide d'un assez gros pigeon voyageur.

Maintenant, Alice pouvait insérer chaque DVD, copier chaque fichier sur son PC, puis utiliser cat et xz pour obtenir le contenu de foo :cat foo.tar.xz.* | tar xfJ -

Supposons maintenant qu'Alice a juste assez d'espace sur son PC pour stocker le contenu extrait de foo . Y a-t-il une saveur de cat qui lira ces fichiers directement à partir des DVD et mettra le flux en pause pour lui permettre d'insérer le prochain DVD ? Quelque chose comme pausecat ou volumecat ?

Réponse acceptée :

Je ne connais pas un tel cat saveur, mais voici une solution qui presque fonctionne :

  1. Dans un terminal, exécutez mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. Insérez le premier DVD dans le lecteur de DVD-ROM (ex. dev/sr0).
  3. Dans un deuxième terminal, exécutez dd if=/dev/sr0 of=myfifo
  4. Quand dd terminé, retirez le DVD.
  5. Si vous avez un autre DVD, insérez-le dans le lecteur de DVD-ROM et passez à l'étape 3, sinon passez à l'étape 6.
  6. Dans le premier terminal, appuyez sur CTRL-C pour tuer tail et tar .

Comment ça marche

L'astuce consiste à utiliser tail pour lire en continu à partir d'un tube nommé. La sortie de tail est ensuite redirigé vers la commande que vous souhaitez exécuter. Initialement, le tuyau n'est pas ouvert, donc rien ne se passe. Mais lorsque vous commencez à pomper des données dans le tuyau avec dd , tail le récupère et le transmet à votre commandement.

La magie opère lorsque le flux de données vers le tube s'arrête :tail garde son descripteur de fichier de sortie standard ouvert, ce qui entraîne la pause de votre commande. Pendant ce temps, tail attend simplement plus d'entrées.

Le problème

La raison pour laquelle j'ai dit que cela fonctionnait presque est qu'il semble y avoir un problème de mise en mémoire tampon qui provoque tail de ne pas écrire le dernier bit de données qui y est introduit. J'espère que quelqu'un pourra fournir les informations nécessaires pour résoudre ce problème.

Connexe :Diviser un champ de chaîne en un tableau dans jq ?
Linux
  1. Ouvrir un fichier .tar.gz avec une seule commande

  2. Trouvez des fichiers et tarez-les (avec des espaces)

  3. Utiliser find et tar avec des fichiers avec des caractères spéciaux dans le nom

  4. Rejoindre des vidéos avec écran partagé

  5. tar -C avec un modèle de fichier générique

Comment télécharger et extraire des fichiers tar avec une seule commande

Tar Vs Zip Vs Gz :Différence Et Efficacité

PDF Split And Merge 'PDFSAM' fait exactement ce qu'il dit

Premiers pas avec la commande Tar

Installation et premiers pas avec Git

Commande split Linux avec exemples