简体   繁体   中英

Get current directory (not full path) with filename only when sub folder is present in Linux bash

I have prepared a bash script to get only the directory (not full path) with file name where file is present. It has to be done only when file is located in sub directory.

For example: if input is src/email/${sub_dir}/Bank_Casefeed.email , output should be ${sub_dir}/Bank_Casefeed.email .

If input is src/layouts/Bank_Casefeed.layout , output should be Bank_Casefeed.layout . I can easily get this using basename command.

src/basefolder is always constant. In some cases (after src/email(basefolder) directory), sub_directories will be there.

This script will work. I can use this script (only if module is email) to get output. but script should work even if sub directory is present in other modules. Maybe should I count the directories? if there are more than two directories (src/basefolder), script should get sub directories. Is there any better way to handle both scenarios?

#!/bin/bash
filename=`basename src/email/${sub_dir}/Bank_Casefeed.email`
echo "filename is $filename"

fulldir=`dirname src/email/${sub_dir}/Bank_Casefeed.email`
dir=`basename $fulldir`
echo "subdirectory name: $dir"

echo "concatenate $filename $dir"
Entity=$dir/$filename
echo $Entity

Using shell parameter expansion:

sub_dir='test'
files=( "src/email/${sub_dir}/Bank_Casefeed.email" "src/email/Bank_Casefeed.email" )

for f in "${files[@]}"; do 
    if [[ $f == *"/$sub_dir/"* ]]; then 
        echo "${f/*\/$sub_dir\//$sub_dir\/}"
    else 
        basename "$f"
    fi
done
test/Bank_Casefeed.email
Bank_Casefeed.email

I know there might be an easier way to do this. But I believe you can just manipulate the input string. For example:

#!/bin/bash

sub_dir='test'
DIRNAME1="src/email/${sub_dir}/Bank_Casefeed.email"
DIRNAME2="src/email/Bank_Casefeed.email"

echo $DIRNAME1 | cut -f3- -d'/'
echo $DIRNAME2 | cut -f3- -d'/'

This will remove the first two 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