Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 05-03-2016 10:14:18

Orsam999
Membre
Distrib. : Debian GNU/Linux 7.9 (wheezy)
Noyau : Linux 3.2.0-4-486
Inscription : 16-01-2015

[Résolu] Mettre dans un ficher avec > monfichier.txt

Bonjour à tous,

J'ai une question un peu bête à vous soumettre.

Petit exemple :

Quand je fait ça :

ls -l

, je me retrouve à l'écran avec ça :

-rw-r--r-- 1 root root 329221 mars   5 08:53 liste.txt
-rw-r--r-- 1 root root      0 mars   5 08:28 toto.txt
-rw-r--r-- 1 root root   2725 mars   5 08:52 tttxt
-rw-r--r-- 1 root root 329221 mars   5 08:56 TT.txt
-rw-r--r-- 1 root root    255 mars   5 08:59 tutu.txt
 



Jusque là, pas de problème.

Mais quand je le met dans un fichier avec > monfichier.txt, comme ça :

echo $(ls -l) > monfichier.txt



Mon fichier monfichier.txt ressemble à ça :

total 656 -rw-r--r-- 1 root root 329221 mars 5 08:53 liste.txt -rw-r--r-- 1 root root 0 mars 5 08:28 toto.txt -rw-r--r-- 1 root root 2725 mars 5 08:52 tttxt



Ma question est la suivante, comment garder les retours chariot ???

Merci par avance pour votre aide.

Orsam

Dernière modification par Orsam999 (04-04-2016 09:17:52)


Celui qui ne progresse pas chaque jour, recule chaque jour.
Confucius

Hors ligne

#2 05-03-2016 10:17:00

Severian
Membre
Distrib. : Debian GNU/Linux 8.6 (jessie)
Noyau : Linux 4.6.0-0.bpo.1-amd64
(G)UI : Openbox 3.6.1-2
Inscription : 13-12-2014

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

tu as essayé simplement

ls -l > monfichier.txt


"il est urgent d'attendre" (bendia)
ob3-debian2-150x50.png

Hors ligne

#3 05-03-2016 10:22:20

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

echo "$(ls -l)" > monfichier.txt

Dernière modification par MicP (05-03-2016 10:31:52)

Hors ligne

#4 05-03-2016 10:51:30

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

En ligne

#5 05-03-2016 11:00:20

Orsam999
Membre
Distrib. : Debian GNU/Linux 7.9 (wheezy)
Noyau : Linux 3.2.0-4-486
Inscription : 16-01-2015

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Bon ok,

Là, j'ai vraiment honte ! roll

Orsam

Celui qui ne progresse pas chaque jour, recule chaque jour.
Confucius

Hors ligne

#6 05-03-2016 11:11:08

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Y faut pas smile Les seules questions bêtes sont celles qu'on ne pose pas wink C'est quoi qui marche du coup ? big_smile

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

Hors ligne

#7 05-03-2016 11:34:59

Orsam999
Membre
Distrib. : Debian GNU/Linux 7.9 (wheezy)
Noyau : Linux 3.2.0-4-486
Inscription : 16-01-2015

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Salut Bandia,

En faite, je suis toujours avec mon histoire de smbclient que tu as pu suivre là : http://debian-facile.org/viewtopic.php?id=13573

J'ai pas mal avancé :

J'essai maintenant de filtrer ce que je reçois avec smbclient :


echo "$(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls')" | sed -n '/.xml/p' > liste_xml.txt



Avec ça, je récupère tous les noms de fichiers XML. Le seul problème, c'est que je n'ai plus les arborescences.

Mon fichier ressemble à ça :


  fichier1.xml                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier2.xml                     A 732975104  Fri Apr 23 23:19:44 2010
  fichier3.xml                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier4.xml                     A 732975104  Fri Apr 23 23:19:44 2010
 



ou avec

sed -n '/Films/p'



J'obtiens ça :

\Films\vacances
\Films\Famille



Mais je n'arrive pas à avoir les deux, l'arborescence et les fichier .xml (sans la taille des fichier ni horodatage) comme çà  :


\Films\vacances
  fichier1.xml
  fichier2.xml
\Films\Famille
  fichier3.xml
  fichier4.xml
 



Une idée ??

Merci beaucoup

Orsam


Celui qui ne progresse pas chaque jour, recule chaque jour.
Confucius

Hors ligne

#8 05-03-2016 12:20:14

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

J'avais fait un script python pour faire ce genre de truc. Je regarde ça pour voie si ça pourrait s'adapter mais ça ne sera pas avant ce soir hmm

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

Hors ligne

#9 05-03-2016 12:30:29

Orsam999
Membre
Distrib. : Debian GNU/Linux 7.9 (wheezy)
Noyau : Linux 3.2.0-4-486
Inscription : 16-01-2015

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Merci, c'est gentil, mais ne t’embête pas quand même.

Au pire je ferais ça avec PHP avec qui je suis beaucoup plus à l’aise.

Orsam

Celui qui ne progresse pas chaque jour, recule chaque jour.
Confucius

Hors ligne

#10 05-03-2016 20:02:11

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Je viens juste de comprendre comment tu pratiquais. Du coup, si je comprend bien, tu utilises les commande contenues dans smbclient. Le ls que l'on voit ne correspond pas à celui dont on a l'habitude smile

Il faudrait voir une sortie brute histoire de savoir comment filtrer ça smile

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

Hors ligne

#11 05-03-2016 20:27:57

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Orsam999 a écrit :

J'essai maintenant de filtrer ce que je reçois avec smbclient :


echo "$(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls')" | sed -n '/.xml/p' >liste_xml.txt
 


Quel est le format renvoyé par « smbclient '//192.168.1.23/mesfilms' -N -c 'recurse;prompt;cd mesfilms;ls' »

D'ailleurs je me demande si c'est la bonne façon de procéder. On voit que tu utilises deux fois « mesfilms », est-ce
nécessaire ?

Et en général, il est inutile de faire des commandes comme « echo "$(cmd; othercmd)" | anothercmd… » car
la commande « (cmd… ; othercmd… )|anothercmd… » fait la même chose… Pour commencer, je te propose
la simplification :


(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls') | sed -n '/.xml/p' >liste_xml.txt
 



Ne serait-il pas plus efficace de monter ce répertoire et d'utiliser find qui lui conserve
le chemin des fichiers en entier ?

Si tu ne comprends pas ce que je raconte, n'hésite pas à poser des questions wink


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#12 06-03-2016 06:45:27

Orsam999
Membre
Distrib. : Debian GNU/Linux 7.9 (wheezy)
Noyau : Linux 3.2.0-4-486
Inscription : 16-01-2015

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Bonjour Enicar,

Et merci pour ta réponse et voici les miennes

Quel est le format renvoyé par « smbclient '//192.168.1.23/mesfilms' -N -c 'recurse;prompt;cd mesfilms;ls' »



Voici ce que ça renvoi :


\mesfilms\vacances
  .
  ..
  fichier1.xml                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier1.avi                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier2.xml                     A 732975104  Fri Apr 23 23:19:44 2010
  fichier2.avi                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier3.xml                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier3.avi                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier4.xml                     A 732975104  Fri Apr 23 23:19:44 2010
  fichier4.avi                     A 732721152  Fri Apr 23 23:40:20 2010
\mesfilms\Famille
  .
  ..
  fichier5.xml                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier5.avi                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier6.xml                     A 732975104  Fri Apr 23 23:19:44 2010
  fichier6.avi                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier7.xml                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier7.avi                     A 732721152  Fri Apr 23 23:40:20 2010
  fichier8.xml                     A 732975104  Fri Apr 23 23:19:44 2010
  fichier8.avi                     A 732721152  Fri Apr 23 23:40:20 2010
   




D'ailleurs je me demande si c'est la bonne façon de procéder. On voit que tu utilises deux fois « mesfilms », est-ce
nécessaire ?



Oui, //192.168.1.23/mesfilms/ correspond au nom du HDD (Il y en a plusieurs branché dessus) et le 'recurse;prompt;cd mesfilms;ls' indique le répertoire.

Le echo "$(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls')"

me permet de garder mes retours chariots

Ne serait-il pas plus efficace de monter ce répertoire et d'utiliser find qui lui conserve
le chemin des fichiers en entier ?



big_smile En faite, je ne voulais rien de compliqué ! big_smile

J'ai réussi à faire ce que je voulais en PHP. J'aurais simplement aimé faire fonctionner la Sed avec les deux filtres '/.xml/p' et '/Films/p' cela me permettrait d’alléger un peu le traitement.

Pour résumer, j'aimerais que le fichier liste_xml.txt de la commande suivante ne récupère du smbclient que les lignes contenant ".xml" et "/Films":


echo "$(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls')" > liste_xml.txt




J’espère avoir été clair dans mes explications.

Merci beaucoup.

Orsam

Dernière modification par Orsam999 (06-03-2016 06:51:51)


Celui qui ne progresse pas chaque jour, recule chaque jour.
Confucius

Hors ligne

#13 06-03-2016 08:02:54

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Essaye avec cette ligne de commandes :

(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls') | awk '/(\\vacances|\\Famille|\.xml)/ {print $1}'


qui, vu ton message #12, devrait donner ce que tu demandais dans ton message #7 :

\mesfilms\vacances
fichier1.xml
fichier2.xml
fichier3.xml
fichier4.xml
\mesfilms\Famille
fichier5.xml
fichier6.xml
fichier7.xml
fichier8.xml
 



=======
Je ne suis pas non plus arrivé à trouver la listes des options possibles de la commande ls (ou dir) de smbclient (je n'ai pas de samba installé chez moi)
et c'est bien dommage, car il existe peut-être une option de cette commande qui éviterait d'avoir à utiliser awk

Dernière modification par MicP (06-03-2016 08:23:15)

Hors ligne

#14 06-03-2016 08:23:08

Orsam999
Membre
Distrib. : Debian GNU/Linux 7.9 (wheezy)
Noyau : Linux 3.2.0-4-486
Inscription : 16-01-2015

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Bonjour MicP,

ARRETE TOUT !! C'est parfait !!!

La seule chose qui "cloche", c'est le {print $1} . Car dans mon exemple, les fichiers se nomment fichier1, fichier2, etc... Mais en réalité c'est plus Vacance Ile Maurice.xml, Vacances Miami. xml (Miami, J'aimerais bien big_smile ). Donc le {print $1} ne va pas, car il "split" les noms de fichiers. Mais je saurais l'adapter sans problème !!!

Un grand merci à toi.

Orsam

Celui qui ne progresse pas chaque jour, recule chaque jour.
Confucius

Hors ligne

#15 06-03-2016 08:36:35

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Encore une fois un problème d'espace dans le nom de fichier…
Mais Il y a pire : Certains utilisent des espaces insécables ou autre "joyeuseté" du même genre

=======
Si c'est vraiment un caractère espace, il doit être possible de faire un script afin de remplacer ces espaces par un caractère "_"
ce qui donnerait par exemple :

Vacance_Ile_Maurice.xml


Il faudra mounter temporairement le système de fichiers de //192.168.1.23/mesfilms/ juste le temps de faire ce renommage depuis un système Linux,
ou créer un script batch à exécuter sur l'autre système.

=======
À tout hasard, essaye quand même comme ça :

(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls') | awk 'IFS='\t'; /(\\vacances|\\Famille|\.xml)/ {print $1}'


la variable d'environnement $IFS (Internal Field Separator) est définie par défaut par une suite comprenant un espace, une tabulation et un retour à la ligne.
Mais là, pour  awk, je l'ai redéfinie par seulement un caractère de tabulation.
(en espérant que c'est le caractère qui sépare les champs et qu'il n'a pas été remplacé par une suite d'espaces)

EDIT : Mais il y a plus simple avec awk :

(smbclient '//192.168.1.23/mesfilms/' -N -c 'recurse;prompt;cd mesfilms;ls') | awk -F '\t' '(\\vacances|\\Famille|\.xml)/ {print $1}'

Dernière modification par MicP (07-03-2016 01:40:47)

Hors ligne

#16 06-03-2016 11:50:49

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Mettre dans un ficher avec > monfichier.txt

Orsam999 a écrit :

En faite, je ne voulais rien de compliqué ! big_smile


Justement, utiliser un « echo "$(cmd…)", c'est vraiment compliqué pour
rien. Aussi, utiliser le « ls » de smbclient ne simplifie pas la vie
non plus, car ça aplati toute l'arborescence et ça fourni  des
informations sur la taille et l'horodotage qui te sont inutiles. Bien
au contraire, find permet d'avoir une liste de fichier en
conservant l'arborescence et sans les informations qui ne
t'intéressent pas.

Par exemple, si le point de montage de la machine distante est
/media/mesfilms/, le script suivant pourrait convenir :


#! /bin/bash

find /media/mesfilms/mesfilms/vacances -type f -name "*.xml" |sed 's,^/media/mesfilms/mesfilms/,,' >liste_xml.txt
find /media/mesfilms/mesfilms/Famille -type f -name "*.xml" |sed 's,^/media/mesfilms/mesfilms/,,' >>liste_xml.txt
 



Il faudra adapter en fonction de ce que renvoie find et du point de
montage, mais le principe est là. Je trouve cela bien plus simple que
la commande smbclient que tu utilises. Remarque, c'est peut être à
cause du fait que je n'utilise jamais samba et que je sais à peu près
me servir de find… wink
Évidemment, j'utilise deux lignes de commandes. On peut aussi écire
cela en une seule ligne mais ça complique le code ; je préfère montrer
un exemple où le principe est plus simple à comprendre.

D'ailleurs pour être vraiment rigoureux il ne faudrait pas l'écrire
ainsi, mais bon on va préserver la simplicité de l'exemple wink


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

Pied de page des forums