Search code examples
linuxgrepredhat

Using grep with RedHat 7.7


ls * output :

dossier_1:
vc.all.2019.09.17.Tue.gz  vc.all.2019.09.19.Thu.gz  vc.all.2019.09.21.Sat.gz  vc.all.2019.09.22.Sun.gz  vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz  vc.all.2019.09.20.Fri.gz  vc.all.2019.09.22.Sun     vc.all.2019.09.23.Mon     vc.all.2019.09.25.Wed.gz

dossier_2:
vc.all.2019.09.17.Tue.gz  vc.all.2019.09.18.Wed.gz  vc.all.2019.09.19.Thu.gz  vc.all.2019.09.20.Fri.gz  vc.all.2019.09.21.Sat.gz  vc.all.2019.09.22.Sun  vc.all.2019.09.22.Sun.gz  vc.all.2019.09.23.Mon

dossier_3:
vc.all.2019.09.17.Tue.gz  vc.all.2019.09.18.Wed.gz  vc.all.2019.09.19.Thu.gz  vc.all.2019.09.20.Fri.gz  vc.all.2019.09.21.Sat.gz  vc.all.2019.09.22.Sun  vc.all.2019.09.22.Sun.gz  vc.all.2019.09.23.Mon

If I do

ls * | grep -v "gz"

On my directory, I find :

dossier_1:
vc.all.2019.09.22.Sun
vc.all.2019.09.23.Mon

dossier_2:
vc.all.2019.09.22.Sun
vc.all.2019.09.23.Mon

dossier_3:
vc.all.2019.09.22.Sun
vc.all.2019.09.23.Mon

What is the command if I want this output :


dossier_1:
vc.all.2019.09.17.Tue.gz  
vc.all.2019.09.19.Thu.gz  
vc.all.2019.09.21.Sat.gz  
vc.all.2019.09.22.Sun.gz  
vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz 
vc.all.2019.09.20.Fri.gz  
vc.all.2019.09.25.Wed.gz


dossier_2:
vc.all.2019.09.17.Tue.gz  
vc.all.2019.09.19.Thu.gz  
vc.all.2019.09.21.Sat.gz  
vc.all.2019.09.22.Sun.gz  
vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz 
vc.all.2019.09.20.Fri.gz  
vc.all.2019.09.25.Wed.gz


dossier_3:
vc.all.2019.09.17.Tue.gz  
vc.all.2019.09.19.Thu.gz  
vc.all.2019.09.21.Sat.gz  
vc.all.2019.09.22.Sun.gz  
vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz 
vc.all.2019.09.20.Fri.gz  
vc.all.2019.09.25.Wed.gz

I want to display the name of the directory and his own files with only .gz extension.

But I don't know how to do this.

Can you help me ?

Thank you !


Solution

  • Here is a way to do it using awk

    ls -A1 * | awk '/(^|:|\.gz)$/'
    dossier_1:
    vc.all.2019.09.17.Tue.gz
    vc.all.2019.09.18.Wed.gz
    vc.all.2019.09.19.Thu.gz
    vc.all.2019.09.20.Fri.gz
    vc.all.2019.09.21.Sat.gz
    vc.all.2019.09.22.Sun.gz
    vc.all.2019.09.24.Fri.gz
    vc.all.2019.09.25.Wed.gz
    
    dossier_2:
    vc.all.2019.09.17.Tue.gz
    vc.all.2019.09.18.Wed.gz
    vc.all.2019.09.19.Thu.gz
    vc.all.2019.09.20.Fri.gz
    vc.all.2019.09.21.Sat.gz
    vc.all.2019.09.22.Sun.gz
    
    dossier_3:
    vc.all.2019.09.17.Tue.gz
    vc.all.2019.09.18.Wed.gz
    vc.all.2019.09.19.Thu.gz
    vc.all.2019.09.20.Fri.gz
    vc.all.2019.09.21.Sat.gz
    vc.all.2019.09.22.Sun.gz
    
    • ls -A1 * list all files (names only) in all folder, one line at the time
    • /(^|:|\.gz)$/ find all lines that are empty, ends with : or ends with .gz and print them.