假设我需要将文件移动/etc/dir1/dir2/dir3/a.out
到/etc/dir1/dir2/dir3/b.out
两次输入整个路径非常繁琐,而且转到目录可能不太理想。有没有办法在不重新输入目录的情况下完成这样的移动?
关于相关问题(我怀疑有相同的解决方案)。假设我想将文件移动someverybigfilename.png
到somereallybigfilename.png
。有没有办法在不重新输入名称的情况下完成此操作?
(我知道我可以使用脚本。但是它mv
本身支持这样的东西吗?)
简而言之:如何使用 move 部分更改/仅更改文件名的一部分?如何进行扩展名之类的小更改?
答案1
答案2
任何一个
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
答案3
如果路径相同,我不明白为什么不进入该文件夹。
您可以使用 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:~$
关于文件名,我唯一想到的就是将其存储在一个变量中。
答案4
有几种方法可以解决这个问题。一种方法是通过~/.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