Я нашел решение, которое очень близко подходит к простоте модификаторов имени файла tcsh.Я написал 4 функции и поместил их в .bashrc.
e() # the extension
E() # everything but the extension
t() # the tail - i.e. everything after the last /
T() # everything but the tail (head)
Определения в конце.
Эти функции могут принимать аргумент, например, так:
f=foo/bar/my_image_file.0076.jpg
e $f
--> jpg
E $f
--> foo/bar/my_image_file.0076
или принимать входные данные из канала, который является функциейиз tcsh, который я действительно хотел:
echo $f|E|e
--> 0076
или, конечно, комбинация:
T $f|t
--> bar
, и меня только что осенило, что он примет много файлов через канал:
ls foo/bar/
--> my_image_file.0075.jpg my_image_file.0076.jpg
ls foo/bar/ |E|e
--> 0075
--> 0076
Определения:
#If there are no args, then assume input comes from a pipe.
function e(){
if [ $# -ne 0 ]; then
echo ${1##*.}
else
while read data; do
echo ${data##*.} ;
done
fi
}
function E(){
if [ $# -ne 0 ]; then
echo ${1%.*}
else
while read data; do
echo ${data%.*}
done
fi
}
function t(){
if [ $# -ne 0 ]; then
echo ${1##*/}
else
while read data; do
echo ${data##*/} ;
done
fi
}
function T(){
if [ $# -ne 0 ]; then
echo ${1%/*}
else
while read data; do
echo ${data%/*}
done
fi
}