при использовании mv учитывайте путь/имя исходного файла при выборе места назначения [duplicate]

Скажем, мне нужно переместить файл /etc/dir1/dir2/dir3/a.out в /etc/dir1/dir2/dir3/b.out

Набирать весь путь дважды - утомительно, да и переход в каталог может быть не идеальным. Есть ли способ сделать такое перемещение без повторного ввода каталога?

По поводу смежного вопроса (который, как я подозреваю, имеет такое же решение). Скажем, я хочу переместить файл someverybigfilename.png в somereallybigfilename.png. Есть ли способ сделать это без повторного ввода имени?

(Я знаю, что могу использовать сценарий. Но поддерживает ли mv что-то подобное?)

Короче говоря: как я могу использовать move для частичного изменения/изменения только части имени файла? Как сделать небольшое изменение типа расширения?

6
задан 23 March 2017 в 11:37

4 ответа

В первом случае, если Вы используете bash, можно использовать расширение фигурной скобки :

mv /etc/dir1/dir2/dir3/{a.out,b.out} 

или даже

mv /etc/dir1/dir2/dir3/{a,b}.out

Во втором случае Вы могли использовать расширение фигурной скобки снова:

mv some{very,really}bigfilename.png

Или (хотя это действительно не сохраняет много ввода) Вы могли использовать расширение Bash истории следующим образом:

$ mv someverybigfilename.png !#$:s/very/really
mv someverybigfilename.png somereallybigfilename.png
13
ответ дан 23 November 2019 в 07:18

или

cd /etc/dir1/dir2/dir3/
mv a.out b.out

или

делают сценарий как

#!/bin/bash
dir_Path="/etc/dir1/dir2/dir3/"

mv $dir_Path\a.out $dir_Path\b.out

exit

и переименовать:

#!/bin/bash
dir_Path="/etc/dir1/dir2/dir3/"
name_part="bigfile.png"
cd $dir_Path
mv some$name_part somereally$name_part

exit
2
ответ дан 23 November 2019 в 07:18

Если путь является тем же, я не вижу оснований почему не ввод в папку.

Вы могли сохранить путь с pushd или возвратились с CD -

Пример:

luca@elite:~$ pushd dir1/dir2/dir3/
~/tmp/dir1/dir2/dir3 ~/tmp
luca@elite:~/dir1/dir2/dir3$ mv a.out b.out
luca@elite:~/dir1/dir2/dir3$ popd
~/tmp
luca@elite:~$ 

или

luca@elite:~$ cd dir1/dir2/dir3/
luca@elite:~/dir1/dir2/dir3$ mv b.out a.out
luca@elite:~/dir1/dir2/dir3$ cd -
luca@elite:~$ 

Об имени файла единственная вещь, которая прибыла по моему мнению, состоит в том, чтобы сохранить его в переменной..

2
ответ дан 23 November 2019 в 07:18

Существует несколько способов приблизиться к этому. Можно было быть через функцию, определяемую в ~/.bashrc файл.

pmv(){
    mv "$1"/"$2" "$1"/"$3"
}

pmv функция затем взяла бы 3 аргумента. Путь к каталогу, исходному файлу и целевому файлу. Например:

$ ls testdir
self_test.sh*  test.wxg
$ pmv ./testdir  test.wxg  test2.wxg                                                                                     
$ ls testdir                                                                                                             
self_test.sh*  test2.wx

Заметьте, что в этой функции мы присоединяемся к пути к каталогу и пути к файлу с наклонной чертой, таким образом когда путь к каталогу дан как параметр командной строки, не должно быть запаздывающей наклонной черты в конце. Мы можем, однако, улучшить функциональное определение с помощью расширения параметра удара, которое затем позволит нам использовать также /path/to/dir или /path/to/dir/:

pmv(){
    mv "${1%/}"/"$2" "${1%/}"/"$3"
}

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

Эффективно, нет, нет никакого способа сделать это с mv один. Даже steeldriver's и решения для шахты для первой части Вашего вопроса использует bashфункции, нет mv. Более усовершенствованные манипуляции переименованием, такой как в Вашем тексте вставки случая в имя файла, должны быть, покончили prename где Вы используете регулярные выражения жемчуга для динамичного переименования файлов.

$ touch someverybigfilename.png

$ prename 's/very/really/' someverybigfilename.png                                                                       

$ ls somereallybigfilename.png                                                                                           
somereallybigfilename.png
1
ответ дан 23 November 2019 в 07:18

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

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