Скажем, мне нужно переместить файл /etc/dir1/dir2/dir3/a.out в /etc/dir1/dir2/dir3/b.out
Ввод всего пути дважды утомительно, и переход в каталог может быть не идеальным. Есть ли способ сделать такой шаг, не переустанавливая каталог?
По связанному вопросу (который, как я подозреваю, имеет то же решение). Скажем, я хочу переместить файл someverybigfilename.png в somereallybigfilename.png. Есть ли способ сделать это, не переименовывая имя?
(Я знаю, что могу использовать скрипт, но mv поддерживает некоторую такую вещь изначально?)
Короче: как я могу использовать переход, чтобы частично изменить / изменить только часть имени файла? Как сделать небольшое изменение, например расширение?
либо
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
Если путь один и тот же, я не вижу причины, по которым вы не входите в папку.
Вы можете сохранить путь с помощью 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:~$
О имени файла единственное, что пришло мне в голову, это сохранить его в переменной ..
Есть несколько способов приблизиться к этому. Можно выполнить функцию, определенную в файле ~/.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
Обратите внимание, что в этой функции мы присоединяем путь к каталогу и путь к файлу с косой чертой, поэтому, когда путь к каталогу задается как аргумент командной строки, не должно быть конечной косой черты в конец. Тем не менее, мы можем улучшить определение функции, используя расширение параметра bash, которое позволит нам использовать либо /path/to/dir, либо /path/to/dir/:
pmv(){
mv "${1%/}"/"$2" "${1%/}"/"$3"
}
вопрос (который, как я подозреваю, имеет то же решение). Скажем, я хочу переместить файл someverybigfilename.png в somereallybigfilename.png. Есть ли способ сделать это, не переименовывая имя? Эффективно, нет, нет способа сделать это с помощью mv. Даже решения для steeldriver и моих решений для первой части вашего вопроса используют функции bash, а не mv. Более совершенные манипуляции с переименованием, например, в вашем случае с вставкой текста в имя файла, должны выполняться с помощью prename, где вы используете регулярные выражения perl для динамического переименования файлов.
$ touch someverybigfilename.png
$ prename 's/very/really/' someverybigfilename.png
$ ls somereallybigfilename.png
somereallybigfilename.png