• # ça ne peut pas marcher :(

    Posté par . En réponse au message xargs et caractères spéciaux. Évalué à 1.

    En effet, le matching sur l'* est fait par le shell, pas par xargs... et en pratique, il se passe ceci:

    1) le shell analyse la ligne, et voie la commande suivante:

    xargs -i -t mv [...]/backup_user_{}* /backup[...]

    2) il cherche donc à évaluer, mais comme le [...]_user_{}* ne correspond à rien, il laisse tel quel (note: un tcsh aurait généré une erreur no match)

    3) la commande xargs recoit donc le pattern avec l'*, comme tu t'y attend en fait;

    4) xargs remplace le {}, car tu le lui as demandé...

    5) et il lance lui-même la commande, donc l'* n'est pas évaluée par le/un shell...

    ...d'où problème.

    Je te conseilles donc fortement la solution que te proposes fearan ci-dessus, car dans son cas le shell voie bien l'* après la substitution, puisqu'il la fait lui-même.


    PS1: Perso, plutôt qu'un for, j'utilise un while qui est moins source de problèmes:
    cat user | while read name; do mv ...$name...; done

    PS2: Penses à bien mettre des guillements (") autours des chemins si tu veux éviter les problèmes...