Как я могу переименовать файл во вложенном пути «на месте», то есть без повторного -ввода полного пути?

Это стандартная ошибка, которая не перенаправляется (, когда ваша ссылка не работает )! Это решит вашу проблему, потому что стандартная ошибка перенаправляется на стандартный вывод.

output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something") 
1
12.05.2020, 01:58
4 ответа

Это может быть базовый вопрос, но я не нашел существующего вопроса/ответа на него. Простое решение, которое я сделал, было функцией в~./bash_functions**:

#/home/user/.bash_functions

function mv-rn() {
  mv $1 $(dirname $1)/${2}
}

Так что теперь:

$ mv-rn /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak

(**обратите внимание, что это должно быть в вашем ~/.bashrc, чтобы указанная выше функция распознавалась как псевдоним):

# Function definitions.
if [ -f ~/.bash_functions ]; then
   . ~/.bash_functions
fi
0
20.08.2021, 10:45

Использовать расширение раскоса:

mv /a/long/path/to/a/file.txt{,.bak}

Это переименовывает /a/long/path/to/a/file.txtс пустым суффиксом в /a/long/path/to/a/file.txtс суффиксом .bak.

5
20.08.2021, 10:45

Хотя я бы, вероятно, использовал раскрытие скобок, как показано в ответе Фредди , и в bash, и в zshможно было бы использовать интерактивное раскрытие истории с обозначением #$для ссылки на последнее набранное слово в текущей строке:

mv /a/long/path/to/a/file.txt !#$.bak
3
20.08.2021, 10:45
(cd /a/long/path/to/a && mv file.txt file.txt.bak)

&&гарантирует, что mv будет выполняться только в случае успешного выполнения cd. Круглые скобки означают, что команды будут выполняться в подоболочке, поэтому cd не изменит рабочий каталог вашей существующей оболочки.

0
20.08.2021, 10:45

Теги

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