Question

Remarque:

# cat / tmp / foo - fichier normal

/lib/a.lib
/lib/b.lib
/lib/c.lib
/lib/d.lib

cat / tmp / foo | xargs cp / tmp / fred

cp: la cible /lib/d.lib n'est pas un répertoire

Était-ce utile?

La solution

xargs place normalement ses arguments substitués en dernier. Vous pouvez juste faire:

$ cp `cat /tmp/foo` /tmp/fred/.

S'il ne s'agit que des fichiers lib, cp /lib/?.lib / tmp / fred /. fonctionnerait naturellement.

Et pour le faire vraiment avec xargs , voici un exemple d'utilisation de l'argument en premier:

0:~$ (echo word1; echo word2) | xargs -I here echo here how now
word1 how now
word2 how now
0:~$ 

Autres conseils

Votre version de xargs accepte probablement -I :

xargs -I FOO cp FOO /tmp/fred/ < /tmp/foo

En supposant que / tmp / fred est un répertoire, spécifiez-le à l'aide de l'option -t ( - répertoire-cible ):

$ cat /tmp/foo | xargs cp -t /tmp/fred

Pourquoi ne pas essayer quelque chose comme:

cp /lib/*.lib /tmp/fred

Je pense que votre commande échoue car xargs crée la commande suivante:

cp /tmp/fred /lib/a.lib /lib/b.lib /lib/c.lib /lib/d.lib

C’est-à-dire qu’il finit par essayer de tout copier dans /lib/d.lib, ce qui n’est pas un répertoire, d’où votre message d’erreur.

Le répertoire de destination doit être la dernière chose de la ligne de commande. Toutefois, xargs ajoute stdin à la fin de la ligne de commande, de sorte que, dans votre tentative, il se transforme en premier argument.

Vous pouvez ajouter la destination à / tmp / foo avant d'utiliser xargs, ou utiliser cat dans les backticks pour interpoler les fichiers Sorce avant la destination:

    cp `cat /tmp/foo` /tmp/fred/

En supposant que / tmp / fred est un répertoire qui existe, vous pouvez utiliser une boucle while

while read file
do
    cp $file /tmp/fred
done < /tmp/foo

Répondez par Sinan & # 220; n & # 252; r

cat /tmp/foo | xargs cp -t /tmp/fred

si pas de soutien -t

( cat /tmp/foo; echo /tmp/fred ) | xargs cp
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top