Сокрытие длинных трактов в переменных в Bash

Я должен переместить файлы от одной папки до другого, но они находятся в полностью различных путях. Целевой путь является таким длинным и усложнил это, я не могу помнить это. Есть ли любой способ перейти сначала к целевому каталогу, затем хранят путь в некоторой переменной, позволяет, предполагают X и затем идут, чтобы получить каталог и записать команду как этот:

 mv * $X
2
задан 11 November 2014 в 22:24

6 ответов

Попытка:

cd /your/long/path
X=$(pwd) 

Команда pwd печатает текущий каталог; с командой X=$(pwd) Вы храните вывод команды в переменной (1) X (никакие пробелы вокруг =!)

cd /the/other/dir/
mv * "$X"

Теперь Вы используете значение переменной X, использование $X (считайте $ как "значение"). " это вокруг $X необходимы, если имя каталога содержит пробелы или другие специальные символы.

Если Вы не уверены в том, что находится в X, можно проверить его содержание с

echo "$X" 

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

7
ответ дан 6 October 2019 в 20:44

Принятие Вашей оболочки является ударом, можно использовать

pushd /your/long/directory
popd
mv ./* "$OLDPWD"

, $OLDPWD установлен ударом при изменении каталогов.

4
ответ дан 6 October 2019 в 20:44

Предположим, что Вы находитесь теперь в каталоге с файлами, которые Вы хотите переместить, использовать

cd target_dir
cd -

, чтобы сохранить Ваш target_dir в $OLDPWD переменная и попятиться к Вашему исходному каталогу.

Теперь, можно использовать

mv * "$OLDPWD"

для перемещения файлов в целевой каталог.

<час>

Примечания:

$PWD ( Print Working Directory) всегда remebers текущий рабочий каталог.

И $OLDPWD всегда remebers в последний раз рабочий каталог.

Между прочим, используйте клавишу TAB, чтобы автоматически заполнить Ваш путь при вводе пути.

2
ответ дан 6 October 2019 в 20:44

Некоторое время назад я попытался создать более тщательно продуманную версию X=$(pwd) и mv * $X. Результат был чем-то, что я называю "bashPortalGun". Здесь это:

https://github.com/tyukiand/bashPortalGun

Эти сценарии преобразовывают Ваше приглашение оболочки во что-то вроде этого:

me@host [orange -> there] here$ 

и позволяют Вам делать все, что Вы ожидали бы от "портала оружия", относился к контексту оболочки удара:

me@host ~$ cd /very/long/path
me@host /very/long/path$ pOrange # create orange portal
me@host [orange -> .portal.closed] /very/long/path$ cd /some/other/directory
me@host /some/other/directory$ pBlue # create blue portal
me@host [blue -> path] /some/other/directory$ mv file.txt [orange] # move stuff through portal

, По моему опыту, это делает использование mv и cd более удобным, особенно при работе с несколькими оболочками. Возможно, Вы находите его полезным, возможно, Вы просто полагаете, что это охлаждается для имения портала оружия в ударе:)

Мотивированным испытуемым рады. Конструктивная обратная связь будет высоко цениться.

1
ответ дан 6 October 2019 в 20:44

Возможно, легче просто создать временные символьные ссылки вместо переменных.

Это - также не все что "неловкий" для использования автозавершения/предложений "вкладки". Но может зависеть от отдельного .bashrc, я не уверен.

0
ответ дан 6 October 2019 в 20:44

Почему не используют переменные для src и dest-пути? Здесь немного сценария:

IFS='
'
SRC="/PATH/TO/SOURCE-PATH"
DST="/PATH/TO/DEST-PATH"
for i in `ls $SRC` 
do
mv $SRC/$i $DST/.
done

IFS важна, если у Вас есть имена файлов с пробелами. Без IFS для цикла делают в некоторых средах, которые располагает с интервалами разрыв строки на этом. ( ИСТОЧНИК )

-1
ответ дан 6 October 2019 в 20:44

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

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