Этот скрипт перемещает все файлы документов в указанную директорию. Мне удалось указать аргумент, но проблема, с которой я сталкиваюсь, заключается в том, чтобы указать полный путь, по которому перемещаются скрипты, например, я хочу запустить скрипт, как показано ниже
./loo -d then path where im moving the files (i.e ./loo -d the second argument where files are moving to)
, это мой код [ 113]
#!/bin/bash
From="/home/elg19/lone/doc"
To="/home/elg19/documents"
if [ $1 = -d ]; then
cd "$From"
for i in pdf txt doc; do
find . -type f -name "*.${i}" -exec mv "{}" "$To" \;
done
fi
FWIW, rsync сделает это за вас
rsync --filter="+ *.doc" --filter="+ *.pdf" --filter="+ *.txt" --filter="- *" ~lone/doc/* ~/documents/
Вы можете создать псевдоним в .bashrc, если хотите
alias backup='rsync --filter="+ *.doc" --filter="+ *.pdf" --filter="+ *.txt" --filter="- *" ~lone/doc/* ~/documents/'
Если вам нужно больше, чем * .doc, добавьте to --filer = "+ * .txt";)
Смотрите мой комментарий, если вы хотите отладить ваш скрипт. Ваша проблема в вашем сценарии может быть такой же простой, как ваша условная if [ $1 = -d ]
try
if [ -d "$1" ]; then
Но я не могу сказать из вашего сценария, какие параметры вы передаете и почему (вы определили каталоги в вашем скрипте).
Вы нуждаетесь в getopts. getopts - это библиотека, разработанная для обработки аргументов командной строки, которая обычно доступна на многих языках. В bash вы используете его следующим образом:
Это заимствовано из учебника, который я нашел :
From="/home/elg19/lone/doc"
To="/home/elg19/documents"
while getopts "d:" optionName; do
case "$optionName" in
d) To="$OPTARG";;
[?]) exit 255;;
esac
done
[[ -d "$To" ]] || exit 255
cd "$From"
for i in pdf txt doc; do
find . -type f -name "*.${i}" -exec mv "{}" "$To" \;
done
Это не проверено, но в основном это просто ваш скрипт с возможность переопределить аргумент "$ To" с помощью getopts.
Бит [?] Сообщает о выходе, если найдены какие-либо нераспознанные опции.
С вашим последним комментарием
#!/bin/bash
From="/home/elg19/lone/doc"
#To="/home/elg19/documents"
while getopts "d:" optionName; do
case "$optionName" in
d) To="$OPTARG";;
[?]) exit 255;;
esac
done
[[ -d "$To" ]] || exit 255
for i in pdf txt doc; do
find $From -type f -name "*.${i}" -exec mv "{}" "$To" \;
done