#!/bin/bash
###########################################################
# file name: findline #
# find files with key text, recursively in current folder #
###########################################################
ME=`basename $0`
showHelp()
{
echo "usage $ME -h"
echo "usage $ME [-i] [-s] name_pattern [file_suffix1] [file_suffix2] [...]"
echo "-h: show help"
echo "-i: ignore case"
echo "-s: silence command, not display command"
echo "The file suffix is case insensitive"
}
INVALID=1
IGNORE_CASE=1
SILIENCE=1
NUMBER=1
# check arguments
while getopts :ihsn OPTION
do
case $OPTION in
i) IGNORE_CASE=0
;;
s) SILIENCE=0
;;
h) showHelp
exit 0
;;
*) INVALID=0
;;
esac
done
# user input invalid arguments
[ $INVALID -eq 0 -o $# -eq 0 ] && showHelp && exit 1
#echo $OPTIND
# shift to pattern arg position
shift `expr $OPTIND - 1`
PATTERN=$1
[ $# -gt 1 ] && shift && SUFFIX=$*
# set exec args for options
[ $IGNORE_CASE -eq 0 ] && IGNORE_CASE_ARG="-iname" || IGNORE_CASE_ARG="-name"
if [ -n "$SUFFIX" ]
then
for VAR in $SUFFIX
do
S=$S"|"$VAR
done
SUFFIX_PATTERN=`echo $S | sed 's/|//'`
SUFFIX_ARG=" | grep -i -E \"\.($SUFFIX_PATTERN)\$\""
fi
RET=0
# find command
CMD="find . -type f -follow $IGNORE_CASE_ARG \"*$PATTERN*\" 2>/dev/null $SUFFIX_ARG"
# display find command
[ $SILIENCE -eq 0 ] || echo $CMD
FILES=(`eval $CMD`)
INDEX=0
while [ $INDEX -lt ${#FILES[*]} ]
do
NO=`expr $INDEX + 1`
echo "$NO. ${FILES[$INDEX]}"
eval "_$NO=${FILES[$INDEX]}"
INDEX=$NO
done
if [ ${#FILES[*]} -gt 0 ]
then
# execute command
echo -e "Input command('\$_n' as file name):\c"
read TMP
if [ -n "$TMP" ]
then
COMMAND="$TMP 2>/dev/null"
eval $COMMAND
fi
fi
RET=$?
exit $RET
###########################################################
# file name: findline #
# find files with key text, recursively in current folder #
###########################################################
ME=`basename $0`
showHelp()
{
echo "usage $ME -h"
echo "usage $ME [-i] [-s] name_pattern [file_suffix1] [file_suffix2] [...]"
echo "-h: show help"
echo "-i: ignore case"
echo "-s: silence command, not display command"
echo "The file suffix is case insensitive"
}
INVALID=1
IGNORE_CASE=1
SILIENCE=1
NUMBER=1
# check arguments
while getopts :ihsn OPTION
do
case $OPTION in
i) IGNORE_CASE=0
;;
s) SILIENCE=0
;;
h) showHelp
exit 0
;;
*) INVALID=0
;;
esac
done
# user input invalid arguments
[ $INVALID -eq 0 -o $# -eq 0 ] && showHelp && exit 1
#echo $OPTIND
# shift to pattern arg position
shift `expr $OPTIND - 1`
PATTERN=$1
[ $# -gt 1 ] && shift && SUFFIX=$*
# set exec args for options
[ $IGNORE_CASE -eq 0 ] && IGNORE_CASE_ARG="-iname" || IGNORE_CASE_ARG="-name"
if [ -n "$SUFFIX" ]
then
for VAR in $SUFFIX
do
S=$S"|"$VAR
done
SUFFIX_PATTERN=`echo $S | sed 's/|//'`
SUFFIX_ARG=" | grep -i -E \"\.($SUFFIX_PATTERN)\$\""
fi
RET=0
# find command
CMD="find . -type f -follow $IGNORE_CASE_ARG \"*$PATTERN*\" 2>/dev/null $SUFFIX_ARG"
# display find command
[ $SILIENCE -eq 0 ] || echo $CMD
FILES=(`eval $CMD`)
INDEX=0
while [ $INDEX -lt ${#FILES[*]} ]
do
NO=`expr $INDEX + 1`
echo "$NO. ${FILES[$INDEX]}"
eval "_$NO=${FILES[$INDEX]}"
INDEX=$NO
done
if [ ${#FILES[*]} -gt 0 ]
then
# execute command
echo -e "Input command('\$_n' as file name):\c"
read TMP
if [ -n "$TMP" ]
then
COMMAND="$TMP 2>/dev/null"
eval $COMMAND
fi
fi
RET=$?
exit $RET