Hi Ranjan,
Ranjan Maitra wrote:
On Tue, 20 Oct 2020 18:11:23 -0500 Ranjan Maitra
<maitra(a)email.com> wrote:
> Thanks, everybody, I am almost there. I am wondering how
> do I get to list the files without the first two depths?
> So, here is a part of my code:
>
> MAILDIR=$HOME/Maildir
> MHDIR=$HOME/mail
> FOLDERSPre=$(find $MHDIR -type d -mindepth 1)
>
> So, then I get a list of directories:
> /home/username/mail/....
>
> How do I get the /home/username out of it so that I can
> append the rest to my Maildir directory?
>
> I guess this is now likely a bash question, and well and
> truly OT. Luckily, every part of this thread is.
Sorry to answer my own question, but I managed to do this
by using sed.
Nothing to be sorry about there. You've answered your own
question, but also shared it with the list where others can
learn from it. That's always a plus!
I used:
for ff in $FOLDERSPre
f=$(echo "$ff" | sed -e 's/mail/Maildir/')
which is easier than what i was trying to do: remove the /home/username/mail out and
replace with /home/username/Maildir.
Another way to slice this would be through parameter
expansion. For example:
for ff in $FOLDERSPre; do
f=${ff/$MHDIR/$MAILDIR}
...
done
In the bash manual, search for "Parameter Expansion" for
details on the various types of expansions available. While
the speed of a parameter expansion versus a command
substitution (i.e., the $(echo $ff | sed ... ) in your
example) isn't likely to be noticeable in a script doing a
large MH to Maildir conversion, there are times when it can
improve a script's speed and/or system utilization.
Even without the small performance boost, using a parameter
expansion is often more concise and removes an external
command from the script.
The trade off is that if you're writing a script which needs
to be portable across a wide variety of different operating
systems, you need to consider whether you're using an
expansion that's supported by any POSIX shell (e.g. sh) or
is bash-specific (and ideally adjust the code and/or the
"#!" hashbang appropriately).
Of course, writing such scripts also involves knowing the
same of the utilities like sed, which can vary a good bit
between a GNU/Linux system, BSD-derivatives, Solaris, etc.
--
Todd