On 2020-02-22 04:51, Kaz Kylheku (Coreutils) wrote: > #!/bin/bash > > (find .* * -maxdepth 0 \
Using * globbing is dangerous with files with names like '-delete'. I'd recommend to use find . -mindepth 1 -maxdepth 1 ... and changing the later substr to strip off the leading './'. > \( -not -type d -printf "-%p\0" \) -o \ > \( -type d -printf "d%p\0" \) ) | \ Alternatively to having 2 OR-ed conditions, one could use %y (print file type). > gawk 'BEGIN { RS = "\0" } > /^-/ { nondir[NR] = substr($0, 2) } > /^d/ { dir[NR] = substr($0, 2) } > END { asort(nondir) > asort(dir) > for (l in nondir) > printf("%s\0", nondir[l]); > for (l in dir) > printf("%s\0", dir[l]); }' | \ > xargs -0 ls -dU --color=auto _______________________________^^ This fails (or gives surprising results) if the first file starts with a minus; better tell 'ls' that the options end here with '--'. Finally, if the directory is empty, xargs would still invoke 'ls' once without an argument; thus use the -r, --no-run-if-empty option. This makes: $ find . -mindepth 1 -maxdepth 1 -printf '%y%p\0' \ | gawk 'BEGIN { RS = "\0" }; /^d/ { dir[NR] = substr($0, 4); next; }; { nondir[NR] = substr($0, 4) }; END { asort(nondir) asort(dir) for (l in nondir) printf("%s\0", nondir[l]); for (l in dir) printf("%s\0", dir[l]); }' \ | xargs -r0 ls -dU --color=auto -- Have a nice day, Berny