I’m currently working with a program that creates a folder with a time stamp and puts some files into it.
I want to write a script to automate retrieval of the file from last or second last folder by alphabetical order.
How do I do this on bash?
Image for reference. I want to retrieve a file from the 18-38 folder or the 17-45 folder.
CodePudding user response:
I want to write a script to automate retrieval of the file from last or second last folder by alphabetical order.
cd path/to/02-March-2022
last_dir=$(printf '%s\n' */ | sort | tail -n 1)
second_last_dir=$(printf '%s\n' */ | sort -r | sed '2!d; 2q'
- You can remove or add sort's
-rto switch between Nth newest and Nth oldest.
Edit:
- Globs are always sorted alphabetically (according to current locale), so the first
sortis actually superfluous. Butsortis useful if you need the extrasortflags, or to sort by specific fields, suffixes, etc. - Both
sortand pathname expansion are affected by the current locale, so consider settingLC_ALL=Cfor consistent behavior. (export LC_ALL=CorLC_ALL=C sortforsortto see it).
CodePudding user response:
Suppose you have these directories:
% ls -l
total 0
drwxr-xr-x 2 andrew wheel 64 Mar 3 15:19 1
drwxr-xr-x 2 andrew wheel 64 Mar 3 15:19 2
drwxr-xr-x 2 andrew wheel 64 Mar 3 15:19 3
drwxr-xr-x 2 andrew wheel 64 Mar 3 15:19 4
drwxr-xr-x 2 andrew wheel 64 Mar 3 15:19 5
With the 'last' being 5.
You can do:
% for fn in *; do [[ -d "$fn" ]] && lf="$fn"; done
% echo "$lf"
5
I cannot overstress, however, that the * may or may not give you what YOU think is the 'last directory.'
If you want to assure that it is the last one, sort them by stat and then take the last one.
CodePudding user response:
Try
folders=( path/to/02-March-2022/*/ )
last_dir=${folders[-1]%/}
second_last_dir=${folders[-2]%/}

