3

Контекст: я перемещаюсь по папкам и нахожу нужные мне файлы. Я хотел бы скопировать мои файлы куда-нибудь, чтобы разместить их где-то еще. Но я не хочу иметь дело с попыткой выяснить относительные пути для источника и места назначения.

В основном я хочу что-то вроде того, что я могу сделать в проводниках (выбрать файлы, скопировать, вставить в другое место). Так что рабочий процесс, как ...

cd some/crazy/directory/with/too/long/a/name
copy file 
cd ~/some/other/place
paste 

3 ответа3

1

Даже если вы не хотите использовать скрипт, предложенный @PJC, вы можете использовать его основную идею: сначала скопируйте файл (ы) в /tmp , а затем возьмите оттуда:

cd some/crazy/directory/with/too/long/a/name
cp file /tmp
cd ~/some/other/place
cp /tmp/file .

Это не решает проблему полностью: вы должны повторно ввести имя файла, но по крайней мере без его пути. Я использую его, когда мне лень.

1

Нет встроенной команды, которая делает это в bash. Тем не менее, есть скрипт (одна функция и один псевдоним), который вы можете поместить в свой .bashrc, который дает вам функциональность.

Это подробно описано здесь: http://www.webupd8.org/2010/10/copy-paste-files-from-command-line-bash.html

И являются:

ccopy(){ for i in $*; do cp -a $i /tmp/ccopy.$i; done }
alias cpaste="ls -d /tmp/ccopy* | sed 's|[^\.]*.\.||' | xargs -I % mv /tmp/ccopy.% ./%"

Как сказано в описании сайта, просто добавьте эти две строки в ваш .bashrc, и затем вы можете использовать ccopy, чтобы добавить файлы в список файлов для копирования, а затем cpaste, чтобы вставить их в место назначения. Вы также можете «управлять» списком файлов, посмотрев в /tmp /ccopy *.

ПРИМЕЧАНИЕ. Этот скрипт ограничен обычными файлами с «нормальными» именами. Он явно не справляется с «пробелами» в имени файла, а также не копирует / вставляет папки. В связанной статье есть ссылка на версию, которая работает с папками, но я не знаю, может ли эта версия обрабатывать пробелы или нестандартные символы в именах файлов / папок. Я делаю большую часть своей (linux) работы из командной строки, поэтому эта версия соответствует моему варианту использования.

1

Вы можете назначить имя файла переменной. readlink -f выдаст вам /absolute /path /to /file.

cd some/crazy/directory/with/too/long/a/name
copy="$(readlink -f file)"
cd ~/some/other/place
cp "$copy" newfile

Конечно, это будет работать только для одного файла за раз.

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