Создание псевдонима для корзины
Я новичок. Я установил псевдоним в файле.bashrc следующим образом.
alias myrm='mv /home/user/Trash/*'
Цель состоит в том, чтобы при использовании комментария myrm, например, $myrm foo, файл "foo" необходимо было переместить в папку "Корзина", которая находится в моей домашней папке (/ home / user / Trash).
Тогда я сделал
$source ~/.bashrc
После этого, когда я пытаюсь использовать myrm, набрав $myrm foo, я получаю следующее сообщение об ошибке.
mv: not stat '/home/user/Trash/*': нет такого файла или каталога
Как эта проблема может быть решена?
6 ответов
Прежде всего, вы не используете $
когда вы называете псевдоним. $
предназначен для расширения переменной (и нескольких других вещей, которые не имеют особого отношения к этому вопросу).
Но, во-вторых, псевдонимы работают немного как переменные, в том смысле, что они (рискуя немного упростить) просто расширяются до нескольких слов. Вы говорите, что хотите сделать myrm foo
, но это расширилось бы до mv /home/user/Trash/* foo
, который не имеет смысла.
Простым решением было бы определить псевдоним, который будет mv -t /home/user/Trash
, который будет работать, потому что mv
поддерживает
Файл mv -t destination_dir …синтаксис как альтернатива
mv file … destination_dirсинтаксис.
Но вы можете получить большую гибкость с помощью функции оболочки. Они сочетают гибкость сценариев с (низкими) издержками псевдонимов. Например,
myrm() { mv "$@" /home/user/Trash; }
вызовет myrm foo
быть интерпретированным как mv foo /home/user/Trash
,
Вероятно, более простое решение - использовать trash-cli
пакет. Тогда вы можете просто сделать alias myrm=trash
а потом trash foo
выполнить то, что вы хотите. За исключением того, что Foo теперь пойдет в ~/. local/share/Trash
Проблема в том, mv
ты должен использовать это как mv source destination
,
С твоим псевдонимом это наоборот mv destination source
,
Также вам не нужна звездочка *
в конце, потому что это работает с местом назначения как папка. Убедитесь, что ваша папка /home/user/Trash
существует с mkdir /home/user/Trash
,
Чтобы решить вашу идею псевдонима, я бы порекомендовал вам взглянуть на следующие вопросы:
Это приведет к этому решению; пожалуйста, добавьте это к вашему ~/.bashrc
и сделать source ~/.bashrc
после добавления:
myrm() {
/bin/mv "$@" /home/user/Trash/
}
Как указано в комментариях, mv
синтаксис другой вы можете сделать:
myrm(){ mv "$@" $HOME/Trash/; }
который может обрабатывать несколько файлов в качестве аргумента
Однако этот простой псевдоним не обрабатывает конфликты имен файлов, а также метаданные (откуда они были удалены, ...).
Для более полного решения, вы можете просто использовать пакет trash-cli
что довольно хорошо и поставляется с несколькими инструментами (например, пустые файлы, которые находятся в корзине в течение X дней, ...).
Есть еще один полезный псевдоним, который вы могли бы рассмотреть, если у вас есть gvfs-bin
пакет установлен на вашем хосте:
alias myrm='gvfs-trash`
Он перемещает ваши файлы в корзину. Кроме того, правильные файлы записываются в вашу папку $TRASH (например, info/
, files/
...). Так что вам не нужно беспокоиться об этом. Пример: заходим в корзину и нажимаем restore
будет отлично работать.
Это избыточно с trash-cli
но на вашем хосте может быть установлен только один из них, поэтому, если у вас нет trash-cli, попробуйте.
Вам нужно сделать
mv "$1" /home/user/Trash/
или же mv -t /home/user/Trash/
вместо mv /home/user/Trash/
Manpage здесь