Изменить каталог на цель перемещения

Вы можете попробовать что-то вроде этого:

# ask for username
while true # start infinity loop
do
    wUsername=`zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Kasutajanimi:"`

    # user abort
    if [ $? -ne 0 ]; then
          exit 0
    fi

    # remove spaces
    wUsername=$( echo "$wUsername" | tr -d ' ' )

    # check user input
    if [ -z "$wUsername" ]; then
        # user input is empty -> throw error and continue the loop
        zenity --error --title="Viga kasutajanimes!" --text="Palun sisestage oma kasutajanimi"  
    else # user input is not empty 
        break # leave loop
    fi
done

и то же самое для ввода пароля.

1
задан 2 March 2017 в 19:41

2 ответа

Если вы не меняете имя файла, вы можете опустить его, и mv добавит его автоматически; это особенно полезно при перемещении нескольких файлов:

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/

mv *.pdf ../../../Dropbox/sharedfolder/subdirectory/

С каталогом в качестве последнего аргумента вы можете использовать !!:$ или !$, как описывает ответ муру. Если вы используете bash с обычными значениями по умолчанию, вы можете использовать Alt +. вместо. (Это команда readline insert-last-argument, bind -p отобразит все ваши текущие привязки.)

4
ответ дан 23 May 2018 в 00:59
  • 1
    обратите внимание, что опускание имени файла назначения может спокойно перезаписать файл назначения, если он уже существует – cat 3 March 2017 в 00:31
  • 2
    mv всегда перезаписывает файлы назначения молча, если вы не укажете параметры -i / --interactive или -n / --no-clobber. Вот почему у меня alias mv='mv -i' cp='cp -i' в моем .bashrc. – David Foerster 14 March 2017 в 16:02

Другой подход заключается в создании вашей собственной команды, предназначенной для этой цели. Это можно сделать с помощью функции, которая может выглядеть так:

$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }

Где: (1) mv-special - имя функции; (2) переменные $1 и $2 являются аргументами в функции, которые будут использоваться командами mv и cd; (3) $(echo $2-) добавляет символ wildcat в конец строки в var $2 и исправляет поведение dirname, если переменная $2 содержит только путь; (4) $(dirname $(echo $2-)) будет фильтровать только путь от $2.

Согласно функции , функция может выглядеть так:

$ function mv-special { mv $1 $2; cd ${2%/*}; }

Где: (1) mv-special - имя функции; (2) переменные $1 и $2 являются аргументами в функции, которые будут использоваться командами mv и cd; (3) $(echo $2-) добавляет символ wildcat в конец строки в var $2 и исправляет поведение dirname, если переменная $2 содержит только путь; (4) $(dirname $(echo $2-)) будет фильтровать только путь от $2.

Чтобы быть доступным в качестве команды, эта функция должна быть экспортирована:

$ export -f mv-special

Использование :

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

или:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/

Обратите внимание на то, что для обоих вариантов второй аргумент ($2) должен заканчиваться именем файла или косой чертой (/).

Чтобы наша новая команда была постоянно доступна, определение функции и команды export должно быть добавлено к ~/.bashrc:

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special

или: [!d19 ]

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special

экспортировано

Пользовательская команда может быть выполнена и через исполняемый файл сценария, который помещен в ~/bin или в /usr/sbin: Как создать пользовательскую команду терминала (для запуска скрипта)? Но, честно говоря, у меня возникла проблема с поведением cd в этом сценарии.

-1
ответ дан 23 May 2018 в 00:59

Другие вопросы по тегам:

Похожие вопросы: