简体   繁体   中英

Separate Directories from Files with “----” Bash Scripting

I want to separate directories from files in a list. I would like them to appear as follows:

  1. DirectoryName1
  2. DirectoryNameA
  3. DirectoryName_Two

    --

  4. FileName1

  5. FileNameA
  6. FileName_Two

Basically, I want two or three dashes in between my directories and files. Here is what the following code looks like.

  1. DirectoryName1
  2. DirectoryNameA
  3. DirectoryName_Two
  4. FileName1
  5. FileNameA
  6. FileName_Two

Here is my code:

#!/bin/bash

if  [[ $# -ge 1 ]]; then
   cd "$1" 2> /dev/null
   if [[ $? = 1 ]]; then
      echo "Please enter a valid directory."
   else
      ls -a | sort -k 1 | awk '{printf "(%d) %s\n", NR, $0;}'
   fi
else
   ls -a | sort -k 1| awk '{printf "(%d) %s\n", NR, $0;}'
fi

Here's one possible solution:

#!/bin/bash

if [[ $# -ge 1 ]]; then
    dir_to_list=$1
    if [[ ! -d ${dir_to_list} ]]; then
        echo "Please enter a valid directory."
        exit
    fi
else
    dir_to_list="."
fi

files=`ls --group-directories-first $dir_to_list`
DIRS="TRUE"

i=0

for f in ${files}; do
    if [[ ${DIRS} == "TRUE" && ! -d ${dir_to_list}/${f} ]]; then
        # First non-directory entry
        echo ----
        DIRS="FALSE"
    fi
    (( i++ ))
    echo ${i}. ${f}
done

Cheers

Update: fixed bug for listing other directories

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM