J'ai un grand nombre de fichiers dans un log-directory, dont les noms ont été horodatés (dans ce cas avec date +%b[...]
).
Je veux écrire un conforme à POSIX one-liner qui:
soit
ls -ltc
et ayant 2 champs ou moins (comme indiqué par awk
) et ne contenant pas la constante d'expression régulière /Jul/
ou
ls -ltc
et toute ligne ne correspondant pas à /Jul/
.Le résultat est le même pour moi car seule la première ligne est composée de deux champs (comme vu par awk
).
J'ai essayé:
> ll -tc | rm $(awk --posix 'NF > 2 && !/Jul/ {print $NF;}')
> ll -tc | rm $(awk --posix 'NF > 2 !/Jul/ {print $NF;}')
Les deux ont une mauvaise syntaxe car une condition sur NF ne semble pas coexister bien avec une condition de correspondance d'expressions rationnelles comme ls | awk '/foo/ && /bar/'
would.
Est-ce que qn peut me donner des indications sur la manière de sauter un enregistrement quelconque et/ou d'appliquer la condition arithmétique sur NF et le filtrage de motif regexp en même temps? J'ai regardé autour de moi mais je n'ai pas trouvé la syntaxe documentée que je cherchais ...
Soit
awk 'NF<=2 || /Jul/ {next} {print}'
ou
awk 'NR==1 || /Jul/ {next} {print}'
ou inverser la logique pour raccourcir les commandes, soit
awk 'NF>2 && !/Jul/ {print}'
ou
awk 'NR!=1 && !/Jul/ {print}'
~$ cat input
first line
Gen second third
Feb second third
Mar second third
Apr second third
May second third
Jun second third
Jul second third
Aug second third
Sep second third
Oct second third
Nov second third
Dec second third
~$ awk 'NF<=2 || /Jul/ {next} {print}' input
Gen second third
Feb second third
Mar second third
Apr second third
May second third
Jun second third
Aug second third
Sep second third
Oct second third
Nov second third
Dec second third
~$ awk 'NR==1 || /Jul/ {next} {print}' input
Gen second third
Feb second third
Mar second third
Apr second third
May second third
Jun second third
Aug second third
Sep second third
Oct second third
Nov second third
Dec second third
@ Kos a donné une réponse absolument correcte à votre question.
Mais je pense que vous essayez de résoudre un problème qui n’est pas un problème. Pour supprimer des fichiers correspondant à certains critères, vous devez utiliser find
avec le paramètre -delete
.
par exemple:
find . -type f -newermt 2015-07-07 ! -newermt 2015-07-08 -delete
find . -type f -newerat 2015-07-07 ! -newerat 2015-07-08 -delete