De nombreuses sources disent que chaque instance de {} sera remplacée par le nom de fichier trouvé via find, mais lorsque j'essaie d'exécuter ce qui suit, je ne reçois qu'un fichier texte dont le nom est ".txt".
find /directory -name "*pattern*" -exec cut -f8 {} > {}.txt \;
L'objectif était de créer un fichier texte avec seulement la huitième colonne de chaque fichier trouvé, et chaque fichier texte sera nommé d'après son fichier parent. Quelque chose à propos de ce second ensemble de {} ne remplace pas le nom de fichier de chaque fichier trouvé.
Pour remédier aux mises en garde mentionnées par William Pursell dans sa réponse, utilisez ce qui suit:
find /directory -name "*pattern*" -exec sh -c 'cut -f8 "$1" > "$1.txt"' x {} \;
Lorsque vous utilisez sh -c
, il obtient les paramètres de position des arguments qui suivent la chaîne à exécuter. Le x
supplémentaire remplit le $0
, et le nom du fichier substitué deviendra $1
.
Les guillemets doubles permettent que cela fonctionne correctement avec les noms de fichiers contenant des espaces et d'autres caractères spéciaux.
find /directory -name "*pattern*" | xargs awk '{z=FILENAME".txt";print $8>z}'