Здесь простой пример:
#!/bin/bash
files_to_copy=''
destination_directory=''
while (("$#")) ; do
if [[ "$@" = "$1" ]] ; then
# last argument
destination_directory="$1"
else
# argument
files_to_copy="$files_to_copy $1"
fi
shift
done
scp user@remote.server:"$files_to_copy" $destination_directory;
Если вы запустите ./ Пример .sh foo.pdf foo.txt foo.jpg Резервное копирование /
Вы должны получить:
# this will be executed
scp user@remote.server:" foo.pdf foo.txt foo.jpg" backup/
В итоге я создал сценарий, как внизу.
#!/bin/bash
while [[ $# -ge 1 ]]
do
key="$1"
shift
case $key in
-E)
EXTENSION="$1"
length=$(expr length "$EXTENSION")
if [ $length != 3 ]
then
(exit 19); echo "Invalid Input. A three character
extension is required. Exit status:$?"
else
for f in /var/dump/files/*; do
mv -- "$f" "${f}.$EXTENSION"
done
fi
shift
;;
*)
(exit 19); echo "Invalid Option selected. Exit status:$?"
;;
esac
done
Ссылки
Вы не Не уточняю, что это должно быть решение на bash, так что вот решение на Python. При этом учитывается, что вам требуется 3-символьное расширение. Однако это не так уж важно для проверки, что вы ничего не сломаете. Он проверяет каталоги и то, что вы собираетесь переименовывать только реальные файлы. Это решение потребует передачи опции -E.
edit:
Если имя файла начинается с a. (скрытый файл) игнорировать. Что касается символических ссылок, об этом, возможно, придется подумать.
#!/usr/bin/env python
import sys
import argparse
import re
import os
def main():
path = '/var/dump/files'
parser = argparse.ArgumentParser()
parser.add_argument('-E', help='three character extension(.i.e log)',\
type=str)
args = parser.parse_args()
if args.E:
if not re.search(r'^[a-zA-Z]{3}$', args.E):
print 'Invalid Input. A three character extenstion required: %s' % str(args.E)
sys.exit(19)
ext = '.'+str(args.E)
else:
print 'Invalid Input. A three character extenstion required'
sys.exit(19)
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path,f))]
for f in files:
# ignore hidden files
if f[0] == '.': continue
name = f.split('.')[0]
os.rename(os.path.join(path,f),os.path.join(path,name+ext))
if __name__ == "__main__":
main()
В этом решении -E будет параметром, а по умолчанию будет использоваться '.log'. Вы можете указать Required = True в add_argument (), чтобы сделать его обязательным параметром.
#!/usr/bin/env python
import sys
import argparse
import re
import os
def main():
path = '/var/dump/files'
parser = argparse.ArgumentParser()
parser.add_argument('-E', help='three character extension(.i.e log)',\
type=str)
args = parser.parse_args()
if args.E:
if not re.search(r'^[a-zA-Z]{3}$', args.E):
print 'Invalid Input. A three character extenstion required: %s' % str(args.E)
sys.exit(19)
ext = '.'+str(args.E)
else:
ext = '.log'
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path,f))]
for f in files:
# ignore hidden files
if f[0] == '.': continue
name = f.split('.')[0]
os.rename(os.path.join(path,f),os.path.join(path,name+ext))
if __name__ == "__main__":
main()