Вопрос или проблема
в примере предположим, что вы хотите скопировать файл таким образом
cp путь/к/файлу/file.txt путь/к/файлу/file.copy
очень раздражает писать путь дважды, так что есть ли что-то вроде этого с специальным символом:
cp путь/к/файлу/file.txt :)file.copy
это будет очень полезно, особенно если вы пытаетесь diff
два файла в одной директории
Ответ или решение
Для того чтобы сделать второй аргумент относительным к первому в команде Unix, можно использовать несколько подходов, но стоит отметить, что в стандартных командах, таких как cp
, нет специального синтаксиса, подобного :)
. Однако, есть несколько способов упростить запись команды и избежать повторения пути:
-
Использование оболочечного скрипта или командной подмены: Вы можете использовать комбинацию команд оболочки для извлечения директории из первого аргумента и его последующего использования. Например:
cp path/to/the/file.txt $(dirname path/to/the/file.txt)/file.copy
В данном случае
$(dirname path/to/the/file.txt)
возвращает путь к директории, что позволяет вам создать полный путь к новому файлу. -
Использование переменных: Вы можете сохранить путь в переменной, чтобы избежать его повторного написания. Это будет особенно полезно в более длинных командах.
src="path/to/the/file.txt" cp "$src" "${src%.txt}.copy"
Здесь
${src%.txt}
удаляет расширение.txt
из переменной, позволяя вам создать новый файл с расширением.copy
. -
Создание функции в .bashrc или .zshrc: Если вы часто выполняете подобные операции, вы можете создать функцию. Например:
function cpc() { cp "$1" "${1%.*}.copy" }
После добавления этой функции вы сможете просто вызывать
cpc path/to/the/file.txt
, и она автоматически создаст копию файла с нужным именем. -
Применение команд
dirname
иbasename
: Если вы хотите получить только имя файла и заменить его, можно использоватьbasename
в сочетании сdirname
:cp path/to/the/file.txt "$(dirname path/to/the/file.txt)/$(basename path/to/the/file.txt .txt).copy"
Эти методы позволяют вам сократить вводимый текст и избежать дублирования путей. Надеюсь, это поможет вам эффективно использовать командную строку для копирования и сравнения файлов!