Home > Mobile >  Identify the files year wise and delete from a dir in unix
Identify the files year wise and delete from a dir in unix

Time:05-13

I need to list out the files which are created in a specific year and then to delete the files. year should be the input.

i tried with date it is working for me. but not able to covert that date to year for comparison in loop to get the list of files.

Below code is giving 05/07 files. but want to list out the files which are created in 2022,2021,etc.,

    for file in /tmp/abc*txt ; do
    [ "$(date -I -r "$file")" == "2022-05-07" ] && ls -lstr "$file"
done

CodePudding user response:

If you end up doing ls -l anyway, you might just parse the date information from the output.

ls -ltr | awk '$8 ~ /^202[01]$/'

date -r is not portable, though if you have it, you could do

for file in /tmp/abc*txt ; do
    case $(date -I -r "$file") in
        2020-* | 2021-* ) ls -l "$file";;
    esac
done

(The -t and -r flags to ls have no meaning when you are listing a single file anyway.)

If you don't, the tool of choice would be stat, but it too has portability issues; the precise options to get the information you want vary between platforms. On Linux, try

for file in /tmp/abc*txt ; do
    case $(LC_ALL=C stat -c %y "$file") in
        2020-* | 2021-* ) ls -l "$file";;
    esac
done

On BSD (including MacOS) try stat -f %Sm -t %Y "$file" to get just the year.

CodePudding user response:

Try this:

For checking which files are picked up:

echo -e "Give Year :"

read yr

ls -ltr /tmp | grep "^-" |grep -v ":" | grep $yr | awk -F " " '{ print $9;}'

** You can replace { print $9 ;} with { rm $9; } in the above command for deleting the picked files

  • Related