Je voudrais demander un one-liner UNIX pour ce faire
Je comprends les noms de fichiers, find . -type f > filenames.txt
mais je voudrais un fichier texte ressemblant à ceci:
filename;filenamekey
./fn123456789X-5.txt;./123456789X5.
le deuxième champ doit être le nom du fichier remplacé par tous les caractères ([a-yA-Y] mais les chiffres. La raison en est que ce champ contient des ISBN (comprend 0-9 et X), ce qui correspond à ma clé.
alors je recherche dans filenamekey comme ceci
Select filename from books where filenamekey like '%123456789X%';
Dans les noms de fichiers, il n'est pas nécessaire qu'il y ait un ISBN, mais c'est possible. Dans le cas d'aucun ISBN, la clé doit être vide ou indésirable.
J'ai essayé ceci:
find . -type f > filenames1.txt
cat filename1.txt | sed -e 's/[^0-9X\/\.]//g' > filenamekey1.txt
paste filename1.txt filenamekey1.txt | awk '{print $1,$2}'
Y aurait-il un one-liner sophistiqué?
Merci beaucoup!
find . -type f -exec command parameters {} parameters \;
, où commande et paramètres correspondent au traitement dont vous avez besoin et à chaque nom de fichier trouvé remplacé {}
(qui peut être répété jusqu'à la fin \;
). S'il est plus complexe, vous pouvez incorporer les commandes dans un script et le transmettre en {}
tant que paramètre. (2) find . -type f | while read name; do commands ... ; done
, où les commandes utilisent "$name"
pour chaque fichier trouvé.
find . -type f | while read name; do echo $name | sed -e 's/[^0-9\/\.]//g' | awk '{print $1,";",$2}' ; done
Une idée, qu'est-ce qui ne va pas?
find . -type f | while read name; do ohne="$(sed -e 's/[^0-9X\/\.]//g' <<< $name)"; echo $name,";",$ohne; done