Génération NTEntraideLinuxAutres OSLinux[bash] lister/copier le contenu situé à la racine d'un dossier sans rien oublier ( comme les dot-files et les « space-files »)
[bash] lister/copier le contenu situé à la racine d'un dossier sans rien oublier ( comme les dot-files et les « space-files »)
38 réponses
Francois Lafont
Bonjour à tous,
J'ai deux soucis. Dans les deux cas, je précise une fois pour toutes que
je souhaite obtenir des solutions qui gèrent correctement les noms de
fichiers avec des espaces (au début et/ou au milieu et/ou à la fin)
ainsi que les fichiers avec un nom de la forme .xxx (ie un dot-file).
1) Je souhaite lister le contenu situé à la racine d'un dossier
/dossier, c'est-à-dire tous les noms des fichiers-dossiers se trouvant à
la racine de /dossier. Alors, je pense naturellement à :
#-------------------------------------
for i in $(ls -A "/dossier"); do
echo "--$i--"
done
#-------------------------------------
Je « chope » bien les dot-files, mais ça coince avec des
fichiers-dossiers dont le nom contient des espaces. C'est un problème
simple mais pourtant je n'ai pas trouvé mieux que ça pour le résoudre :
#-------------------------------------
find "/dossier" -maxdepth 1 -mindepth 1 | while read; do
nom=$(basename "$REPLY")
echo "--$nom--"
done
#-------------------------------------
Y a-t-il plus simple que ça ? (J'espère que oui quand même).
2) Je souhaite copier tout le contenu du dossier /source vers le dossier
/cible.
« cp -r /source /cible » ne marche pas car il copie le dossier "source"
dans le dossier "cible" alors que je veux copier le contenu de "source".
« cp -r /source/* /cible » ne copie pas les dot-files. Si je fais alors
« cp -r /source/.* /cible », pour des raisons que je ne comprends pas
très bien d'ailleurs (si vous avez une explication au passage ça
m'intéresse), il y a tentative de copie de ce qui se trouve « au dessus
» de /source. Là aussi, pour un problème assez simple en somme, je n'ai
pas trouvé mieux que ça :
#-------------------------------------
find "/source" -maxdepth 1 -mindepth 1 | while read; do
cp -r "$REPLY" "/cible"
done
#-------------------------------------
YBM , dans le message <4f4e4cf0$0$31965$, a écrit :
Il y a quand même bien plus simple...
Oui, tu l'as déjà dit. Tu as eu raison. Mais...
:/tmp/a$ cp -a source/. cible/
Il n'y a pas que cp, dans la vie. Comprendre ce qui se passe et savoir faire pour quand on ne trouve pas d'astuce pour couper court est important.
Nicolas George
Francois Lafont , dans le message <4f4e5402$0$6527$, a écrit :
En revanche, je ne comprends pas pourquoi la présence de ce fichu point change tout le comportement de la commande cp ? Car au final /soure/ ou source/. c'est la même chose non ? J'ai beau regarder la page man de cp, je ne vois pas d'explication là-dessus.
cp -r copie le répertoire source en bloc dans un répertoire de même nom, qu'il crée si nécessaire. Si tu écris « cp -r /some/path/source », il veut copier le répertoire qui s'appelle source, si tu écrirs « cp -r /some/path/source/. », il veut copier le répertoire ., qui s'avère être à la source être exactement le même que source, et idem à la cible.
Francois Lafont , dans le message
<4f4e5402$0$6527$426a74cc@news.free.fr>, a écrit :
En revanche, je ne comprends pas pourquoi la présence de ce fichu point
change tout le comportement de la commande cp ? Car au final /soure/ ou
source/. c'est la même chose non ? J'ai beau regarder la page man de cp,
je ne vois pas d'explication là-dessus.
cp -r copie le répertoire source en bloc dans un répertoire de même nom,
qu'il crée si nécessaire. Si tu écris « cp -r /some/path/source », il veut
copier le répertoire qui s'appelle source, si tu écrirs « cp -r
/some/path/source/. », il veut copier le répertoire ., qui s'avère être à la
source être exactement le même que source, et idem à la cible.
Francois Lafont , dans le message <4f4e5402$0$6527$, a écrit :
En revanche, je ne comprends pas pourquoi la présence de ce fichu point change tout le comportement de la commande cp ? Car au final /soure/ ou source/. c'est la même chose non ? J'ai beau regarder la page man de cp, je ne vois pas d'explication là-dessus.
cp -r copie le répertoire source en bloc dans un répertoire de même nom, qu'il crée si nécessaire. Si tu écris « cp -r /some/path/source », il veut copier le répertoire qui s'appelle source, si tu écrirs « cp -r /some/path/source/. », il veut copier le répertoire ., qui s'avère être à la source être exactement le même que source, et idem à la cible.
YBM
Nicolas George a écrit :
YBM , dans le message <4f4e4cf0$0$31965$, a écrit :
Il y a quand même bien plus simple...
Oui, tu l'as déjà dit. Tu as eu raison. Mais...
:/tmp/a$ cp -a source/. cible/
Il n'y a pas que cp, dans la vie. Comprendre ce qui se passe et savoir faire pour quand on ne trouve pas d'astuce pour couper court est important.
Certes, d'où l'intérêt de faire partager les conclusions d'expériences passées.
Ce que j'en ai gardé en tête, pour des situations similaire c'est
cp -a source/. cible/ # si peu de données (cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
la seconde solution se trouvant terriblement performante.
Nicolas George a écrit :
YBM , dans le message <4f4e4cf0$0$31965$426a74cc@news.free.fr>, a
écrit :
Il y a quand même bien plus simple...
Oui, tu l'as déjà dit. Tu as eu raison. Mais...
user@host:/tmp/a$ cp -a source/. cible/
Il n'y a pas que cp, dans la vie. Comprendre ce qui se passe et savoir
faire pour quand on ne trouve pas d'astuce pour couper court est important.
Certes, d'où l'intérêt de faire partager les conclusions d'expériences
passées.
Ce que j'en ai gardé en tête, pour des situations similaire c'est
cp -a source/. cible/ # si peu de données
(cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
la seconde solution se trouvant terriblement performante.
YBM , dans le message <4f4e4cf0$0$31965$, a écrit :
Il y a quand même bien plus simple...
Oui, tu l'as déjà dit. Tu as eu raison. Mais...
:/tmp/a$ cp -a source/. cible/
Il n'y a pas que cp, dans la vie. Comprendre ce qui se passe et savoir faire pour quand on ne trouve pas d'astuce pour couper court est important.
Certes, d'où l'intérêt de faire partager les conclusions d'expériences passées.
Ce que j'en ai gardé en tête, pour des situations similaire c'est
cp -a source/. cible/ # si peu de données (cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
la seconde solution se trouvant terriblement performante.
Nicolas George
YBM , dans le message <4f4e5dd1$0$12464$, a écrit :
Ce que j'en ai gardé en tête, pour des situations similaire c'est cp -a source/. cible/ # si peu de données (cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
C'est toujours de la copie.
YBM , dans le message <4f4e5dd1$0$12464$426a74cc@news.free.fr>, a
écrit :
Ce que j'en ai gardé en tête, pour des situations similaire c'est
cp -a source/. cible/ # si peu de données
(cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
YBM , dans le message <4f4e5dd1$0$12464$, a écrit :
Ce que j'en ai gardé en tête, pour des situations similaire c'est cp -a source/. cible/ # si peu de données (cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
C'est toujours de la copie.
denis.paris
Le 29/02/2012 18:04, Nicolas George a écrit :
Francois Lafont , dans le message <4f4e5402$0$6527$, a écrit :
En revanche, je ne comprends pas pourquoi la présence de ce fichu point change tout le comportement de la commande cp ? Car au final /soure/ ou source/. c'est la même chose non ? J'ai beau regarder la page man de cp, je ne vois pas d'explication là-dessus.
cp -r copie le répertoire source en bloc dans un répertoire de même nom, qu'il crée si nécessaire. Si tu écris « cp -r /some/path/source », il veut copier le répertoire qui s'appelle source, si tu écrirs « cp -r /some/path/source/. », il veut copier le répertoire ., qui s'avère être à la source être exactement le même que source, et idem à la cible.
Je n'ai pas compris (peut-être des mots en trop, ou en moins?)
Le 29/02/2012 18:04, Nicolas George a écrit :
Francois Lafont , dans le message
<4f4e5402$0$6527$426a74cc@news.free.fr>, a écrit :
En revanche, je ne comprends pas pourquoi la présence de ce fichu point
change tout le comportement de la commande cp ? Car au final /soure/ ou
source/. c'est la même chose non ? J'ai beau regarder la page man de cp,
je ne vois pas d'explication là-dessus.
cp -r copie le répertoire source en bloc dans un répertoire de même nom,
qu'il crée si nécessaire. Si tu écris « cp -r /some/path/source », il veut
copier le répertoire qui s'appelle source, si tu écrirs « cp -r
/some/path/source/. », il veut copier le répertoire ., qui s'avère être à la
source être exactement le même que source, et idem à la cible.
Je n'ai pas compris (peut-être des mots en trop, ou en moins?)
Francois Lafont , dans le message <4f4e5402$0$6527$, a écrit :
En revanche, je ne comprends pas pourquoi la présence de ce fichu point change tout le comportement de la commande cp ? Car au final /soure/ ou source/. c'est la même chose non ? J'ai beau regarder la page man de cp, je ne vois pas d'explication là-dessus.
cp -r copie le répertoire source en bloc dans un répertoire de même nom, qu'il crée si nécessaire. Si tu écris « cp -r /some/path/source », il veut copier le répertoire qui s'appelle source, si tu écrirs « cp -r /some/path/source/. », il veut copier le répertoire ., qui s'avère être à la source être exactement le même que source, et idem à la cible.
Je n'ai pas compris (peut-être des mots en trop, ou en moins?)
YBM
Nicolas George a écrit :
YBM , dans le message <4f4e5dd1$0$12464$, a écrit :
Ce que j'en ai gardé en tête, pour des situations similaire c'est cp -a source/. cible/ # si peu de données (cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
C'est toujours de la copie.
Ben oui... Puisque toute la question est là...
Nicolas George a écrit :
YBM , dans le message <4f4e5dd1$0$12464$426a74cc@news.free.fr>, a
écrit :
Ce que j'en ai gardé en tête, pour des situations similaire c'est
cp -a source/. cible/ # si peu de données
(cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
YBM , dans le message <4f4e5dd1$0$12464$, a écrit :
Ce que j'en ai gardé en tête, pour des situations similaire c'est cp -a source/. cible/ # si peu de données (cd source ; tar cf - .) | (cd cible ; tar xf -) # si beaucoup de données
C'est toujours de la copie.
Ben oui... Puisque toute la question est là...
Nicolas George
YBM , dans le message <4f4e6387$0$23174$, a écrit :
Ben oui... Puisque toute la question est là...
Absolument pas, obtenir la liste de tous les fichiers présents dépasse largement le cadre de la copie.
YBM , dans le message <4f4e6387$0$23174$426a74cc@news.free.fr>, a
écrit :
Ben oui... Puisque toute la question est là...
Absolument pas, obtenir la liste de tous les fichiers présents dépasse
largement le cadre de la copie.
YBM , dans le message <4f4e6387$0$23174$, a écrit :
Ben oui... Puisque toute la question est là...
Absolument pas, obtenir la liste de tous les fichiers présents dépasse largement le cadre de la copie.
Tu confonds les moyens et la fin.
Nicolas George
YBM , dans le message <4f4e6828$0$5872$, a écrit :
Tu confonds les moyens et la fin.
Non. Obtenir la liste des fichiers est un moyen, mais qui peut servir pour différentes fins, qui souvent n'ont pas d'astuce telle que celles que tu as montrées.
Et accessoirement, cette conversation avec toi commence à me gonfler.
YBM , dans le message <4f4e6828$0$5872$426a74cc@news.free.fr>, a écrit :
Tu confonds les moyens et la fin.
Non. Obtenir la liste des fichiers est un moyen, mais qui peut servir pour
différentes fins, qui souvent n'ont pas d'astuce telle que celles que tu as
montrées.
Et accessoirement, cette conversation avec toi commence à me gonfler.
YBM , dans le message <4f4e6828$0$5872$, a écrit :
Tu confonds les moyens et la fin.
Non. Obtenir la liste des fichiers est un moyen, mais qui peut servir pour différentes fins, qui souvent n'ont pas d'astuce telle que celles que tu as montrées.
Et accessoirement, cette conversation avec toi commence à me gonfler.
YBM
Nicolas George a écrit :
YBM , dans le message <4f4e6828$0$5872$, a écrit :
Tu confonds les moyens et la fin.
Non. Obtenir la liste des fichiers est un moyen, mais qui peut servir pour différentes fins, qui souvent n'ont pas d'astuce telle que celles que tu as montrées.
Et accessoirement, cette conversation avec toi commence à me gonfler.
Tu es bien gentil mais dans ce cas il ne fallait pas commencer à me chercher.
Je me suis contenté de répondre à une question précise par une réponse précise, point-barre, pas de quoi me chercher des poux dans la tête.
Nicolas George a écrit :
YBM , dans le message <4f4e6828$0$5872$426a74cc@news.free.fr>, a écrit :
Tu confonds les moyens et la fin.
Non. Obtenir la liste des fichiers est un moyen, mais qui peut servir pour
différentes fins, qui souvent n'ont pas d'astuce telle que celles que tu as
montrées.
Et accessoirement, cette conversation avec toi commence à me gonfler.
Tu es bien gentil mais dans ce cas il ne fallait pas commencer à me
chercher.
Je me suis contenté de répondre à une question précise par une réponse
précise, point-barre, pas de quoi me chercher des poux dans la tête.
YBM , dans le message <4f4e6828$0$5872$, a écrit :
Tu confonds les moyens et la fin.
Non. Obtenir la liste des fichiers est un moyen, mais qui peut servir pour différentes fins, qui souvent n'ont pas d'astuce telle que celles que tu as montrées.
Et accessoirement, cette conversation avec toi commence à me gonfler.
Tu es bien gentil mais dans ce cas il ne fallait pas commencer à me chercher.
Je me suis contenté de répondre à une question précise par une réponse précise, point-barre, pas de quoi me chercher des poux dans la tête.