7

Я новичок. Я установил псевдоним в файле .bashrc следующим образом.

alias myrm='mv /home/user/Trash/*'

Цель состоит в том, чтобы при использовании комментария myrm, например, $ myrm foo, файл "foo" необходимо было переместить в папку "Корзина", которая находится в моей домашней папке (/home/user/Trash).

Тогда я сделал

$source ~/.bashrc

После этого, когда я пытаюсь использовать myrm, набрав $ myrm foo, я получаю следующее сообщение об ошибке.

mv: невозможно указать '/home/user/Trash/*': такого файла или каталога нет

Как решить эту проблему?

6 ответов6

17

Прежде всего, вы не используете $ когда вызываете псевдоним.  $ предназначен для расширения переменной (и нескольких других вещей, которые не имеют особого отношения к этому вопросу).

Но, во-вторых, псевдонимы работают немного как переменные, в том смысле, что они (рискуя немного упростить) просто расширяются до нескольких слов.  Вы говорите, что хотите сделать myrm foo , но это расширится до mv /home/user/Trash/* foo , что не имеет смысла.

Простым решением было бы определить псевдоним mv -t /home/user/Trash , который будет работать, потому что mv поддерживает

mv -t destination_dir  file
синтаксис как альтернатива

mv filedestination_dir
синтаксис.

Но вы можете получить большую гибкость с помощью функции оболочки.  Они сочетают гибкость сценариев с (низкими) издержками псевдонимов.  Например,

myrm() { mv "$@" /home/user/Trash; }

вызовет myrm foo как mv foo /home/user/Trash .

7

Вероятно, более простое решение - использовать пакет trash-cli . Затем вы можете просто сделать alias myrm=trash а затем trash foo чтобы выполнить то, что вы хотите. За исключением того, что foo теперь пойдет в ~/. local/share/Trash

4

Проблема в том, что с mv вы должны использовать его как mv source destination .

С вашим псевдонимом это наоборот mv destination source .

Также вам не нужна звездочка * в конце, потому что она работает с местом назначения как папка. Убедитесь, что ваша папка /home/user/Trash существует с помощью mkdir /home/user/Trash .

Чтобы решить вашу идею псевдонима, я бы порекомендовал вам взглянуть на следующие вопросы:

Это приведет к этому решению; пожалуйста, добавьте это в ваш ~/.bashrc и сделайте source ~/.bashrc после добавления:

myrm() {
 /bin/mv "$@" /home/user/Trash/
}
2

Как указано в комментариях, синтаксис mv отличается от того, что вы можете сделать:

myrm(){ mv "$@" $HOME/Trash/; }

который может обрабатывать несколько файлов в качестве аргумента

Однако этот простой псевдоним не обрабатывает конфликты имен файлов, а также метаданные (откуда они были удалены, ...).

Для более полного решения вы можете просто использовать пакет trash-cli который довольно хорош и поставляется с несколькими инструментами (например, пустые файлы, которые находятся в корзине в течение X дней, ...).

1

Есть еще один полезный псевдоним, который вы могли бы рассмотреть, если на вашем хосте установлен пакет gvfs-bin :

alias myrm='gvfs-trash`

Он перемещает ваши файлы в корзину. Кроме того, правильные файлы записываются в вашу папку $ TRASH (например, info/ , files/ ...). Так что вам не нужно беспокоиться об этом. Пример: зайдя в корзину и нажав кнопку « restore будет отлично работать.

Это избыточно с trash-cli но на вашем хосте может быть установлен только один из них, поэтому, если у вас нет trash-cli, попробуйте.

0

Вам нужно сделать

mv "$1" /home/user/Trash/
или же
mv -t /home/user/Trash/
вместо
mv /home/user/Trash/
Manpage здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .