假设我有两个目录:orig
和backup
。 Orig 包含该文件foo
。我想将文件复制foo
到备份目录,但扩展名为.txt
.
答案1
cp /path/to/orig/foo /path/to/backup/foo.txt
cp
将源文件作为其第一个参数,将目标文件作为其第二个参数。您可能习惯于简单地指定目标目录,这是允许的,但您也可以指定完整路径,以便同时重命名目标文件。
该cp
命令有两种调用方式,源文件和目标目录,并带有源文件和目标文件。手册中的命令概要部分反映了这一点 ( man cp
):
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
答案2
秘密在于意识到没有文件扩展名。文件扩展名是一个 CP/M 概念,被 MS_DOS(CP/M 的一个拙劣克隆)采用。 Unix 没有它们,它只是名称的一部分。然而,有一些工具可以帮助解决这个问题。
basename
: 可用于获取基本名称(不带后缀)。rename
:(Larry Wall 版本)非常适合重命名文件。
为了你想要的。
( fileName=foo; cp -T "/path/to/orig/${fileName}" "/path/to/backup/${fileName}.txt" )
为了安全起见,我添加了这个-T
选项,它可以被省略(不是所有cp
的都有它。但是,如果你犯了一个错误(在第二个参数中指定一个目录),那么如果没有它,它会将文件复制到该目录。