2017-09-05 6 views
3

J'utilise la commande tar un lot, très familier avec elle. Cependant, j'ai essayé de créer une archive en utilisant la commande date pour nommer le fichier archive, et il jette une erreur à l'effet qu'il ne peut pas ouvrir le fichier, ce qui est étrange car je n'essaie pas d'ouvrir le fichier mais de le créer .commande Tar lancer des erreurs lors d'une tentative de créer une archive en utilisant la commande date

Voici une copie du répertoire, le code et l'erreur:

@MDG /media/VideoCam/Test $ ll 
total 468 
drwxr-xr-x 3 neo neo 4096 Sep 5 09:55 ./ 
drwxr-xr-x 4 neo neo 466944 Sep 4 21:54 ../ 
-rw-r--r-- 1 neo neo  45 Sep 5 08:52 1.jpg 
-rw-rw-r-- 1 neo neo  0 Sep 5 08:41 1.mp4 
-rw-r--r-- 1 neo neo  0 Sep 4 19:32 2.jpg 
-rw-rw-r-- 1 neo neo  0 Sep 5 08:41 2.mp4 
-rw-r--r-- 1 neo neo  0 Sep 4 19:32 3.jpg 
-rw-r--r-- 1 neo neo  0 Sep 4 19:32 4.jpg 
-rw-rw-r-- 1 neo neo  0 Sep 5 08:41 4.mp4 
-rw-r--r-- 1 neo neo  0 Sep 4 19:32 5.jpg 
-rw-rw-r-- 1 neo neo  0 Sep 5 08:41 5.mp4 
-rw-r--r-- 1 neo neo  0 Sep 4 19:32 6.jpg 
-rw-rw-r-- 1 neo neo  0 Sep 5 08:41 6.mp4 
-rw-r--r-- 1 neo neo  0 Sep 4 19:32 7.jpg 
-rw-rw-r-- 1 neo neo  0 Sep 5 08:41 7.mp4 
-rw-r--r-- 1 neo neo  0 Sep 4 19:32 8.jpg 
-rw-rw-r-- 1 neo neo  0 Sep 5 08:41 8.mp4 
drwxr-xr-x 2 neo neo 4096 Sep 4 19:30 Archive/ 
[email protected] /media/VideoCam/Test $ sudo tar -zcvf "archive.$(date '+%D').tar.gz" *.jpg 
tar (child): archive.09/05/17.tar.gz: Cannot open: No such file or directory 
tar (child): Error is not recoverable: exiting now 
1.jpg 
2.jpg 
3.jpg 
4.jpg 
5.jpg 
6.jpg 
7.jpg 
8.jpg 
[email protected] /media/VideoCam/Test $ 

J'ai essayé plusieurs concaténations, avec et sans guillemets, de commutation l'ordre des options de commande (zcf), etc. Si je laisse de côté la commande de date et lui donne juste un nom, par exemple archive.tar.gz, il s'exécute parfaitement, mais l'introduction de la commande date provoque l'erreur. J'ai également essayé de régler la commande date en tant que variable avec un résultat similaire.

+1

Corrigez le formatage s'il vous plaît. – luckytaxi

+0

Préfixez votre code/données avec quatre espaces blancs. Veuillez jeter un coup d'œil à [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

+0

'/' n'est pas autorisé dans les noms de fichiers. – Cyrus

Répondre

0

La date est pritning des barres obliques et il le traiter comme chemin du dossier. Utilisez des tirets.

0

Si vous regardez le message d'erreur, vous voyez

tar (child): archive.09/05/17.tar.gz: Cannot open: No such file or directory 

Cela indique qu'il tente de créer le fichier archive.09/05/17.tar.gz. C'est, 17.tar.gz dans le répertoire 05, dans le répertoire archive.09.

Si c'est ce que vous voulez vraiment, ce dont je doute, vous devez créer le répertoire en dehors tar avec quelque chose comme

mkdir -p archive.09/05 

Si vous ne voulez pas les sous-répertoires, vous ne pouvez pas utiliser le caractère / dans la nom de fichier. Essayez un format différent pour la commande ; une option courante est +%F car elle génère des noms de fichiers qui seraient toujours dans le bon ordre s'ils sont triés en tant que texte.

+0

Wow, merci à tous ceux qui ont répondu à cette question si rapidement! Bien que j'utilise Linux depuis longtemps, je suis un noob quand il s'agit du codage/script le plus simple. La réponse semble si évidente mais elle m'a complètement échappé. Aussi, par @Cyrus, je vais vérifier l'édition-aide. Merci encore! – neolithic

1

Je recommande fortement de lire la page de manuel date et vérifier les options de formatage.

Comme il a été suggéré par d'autres la question est le format de sortie date

$ date '+%D' 
09/05/17 

Vous ne pouvez pas créer un fichier avec des barres obliques dans le nom en raison de comportement typique Unix. Vous devriez plutôt essayer quelque chose comme

$ date '+%m-%d-%Y' 
09-05-2017 

que si vous voulez conserver la même mise en forme que %D.