Создание псевдонима для корзины

Я новичок. Я установил псевдоним в файле.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 filedestination_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 здесь

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