在Linux上复制和重命名文件

系统 Linux
cp 和 mv 之外,在 Linux 上有更多的复制和重命名文件的命令。试试这些命令或许会惊艳到你,并能节省一些时间。

[[233973]]

 cp 和 mv 之外,在 Linux 上有更多的复制和重命名文件的命令。试试这些命令或许会惊艳到你,并能节省一些时间。

Linux 用户数十年来一直在使用简单的 cpmv 命令来复制和重命名文件。这些命令是我们大多数人首先学到的,每天可能有数百万人在使用它们。但是还有其他技术、方便的方法和另外的命令,这些提供了一些独特的选项。

首先,我们来思考为什么你想要复制一个文件。你可能需要在另一个位置使用同一个文件,或者因为你要编辑该文件而需要一个副本,并且希望确保备有便利的备份以防万一需要恢复原始文件。这样做的显而易见的方式是使用像 cp myfile myfile-orig 这样的命令。

但是,如果你想复制大量的文件,那么这个策略可能就会变得很老。更好的选择是:

  • 在开始编辑之前,使用 tar 创建所有要备份的文件的存档。
  • 使用 for 循环来使备份副本更容易。

使用 tar 的方式很简单。对于当前目录中的所有文件,你可以使用如下命令:

  1. $ tar cf myfiles.tar *

对于一组可以用模式标识的文件,可以使用如下命令:

  1. $ tar cf myfiles.tar *.txt

在每种情况下,最终都会生成一个 myfiles.tar 文件,其中包含目录中的所有文件或扩展名为 .txt 的所有文件。

一个简单的循环将允许你使用修改后的名称来制作备份副本:

  1. $ for file in *
  2. > do
  3. > cp $file $file-orig
  4. > done

当你备份单个文件并且该文件恰好有一个长名称时,可以依靠使用 tab 来补全文件名(在输入足够的字母以便唯一标识该文件后点击 Tab 键)并使用像这样的语法将 -orig 附加到副本的名字后。

  1. $ cp file-with-a-very-long-name{,-orig}

然后你有一个 file-with-a-very-long-name 和一个 file-with-a-very-long-name-orig。 

在 Linux 上重命名文件

重命名文件的传统方法是使用 mv 命令。该命令将文件移动到不同的目录,或原地更改其名称,或者同时执行这两个操作。

  1. $ mv myfile /tmp
  2. $ mv myfile notmyfile
  3. $ mv myfile /tmp/notmyfile

但我们也有 rename 命令来做重命名。使用 rename 命令的窍门是习惯它的语法,但是如果你了解一些 Perl,你可能发现它并不棘手。

有个非常有用的例子。假设你想重新命名一个目录中的文件,将所有的大写字母替换为小写字母。一般来说,你在 Unix 或 Linux 系统上找不到大量大写字母的文件,但你可以有。这里有一个简单的方法来重命名它们,而不必为它们中的每一个使用 mv 命令。 /A-Z/a-z/ 告诉 rename 命令将范围 A-Z 中的任何字母更改为 a-z 中的相应字母。

  1. $ ls
  2. Agenda Group.JPG MyFile
  3. $ rename 'y/A-Z/a-z/' *
  4. $ ls
  5. agenda group.jpg myfile

你也可以使用 rename 来删除文件扩展名。也许你厌倦了看到带有 .txt 扩展名的文本文件。简单删除这些扩展名 —— 用一个命令。

  1. $ ls
  2. agenda.txt notes.txt weekly.txt
  3. $ rename 's/.txt//' *
  4. $ ls
  5. agenda notes weekly

现在让我们想象一下,你改变了心意,并希望把这些扩展名改回来。没问题。只需修改命令。窍门是理解***个斜杠前的 s 意味着“替代”。前两个斜线之间的内容是我们想要改变的东西,第二个斜线和第三个斜线之间是改变后的东西。所以,$ 表示文件名的结尾,我们将它改为 .txt

  1. $ ls
  2. agenda notes weekly
  3. $ rename 's/$/.txt/' *
  4. $ ls
  5. agenda.txt notes.txt weekly.txt

你也可以更改文件名的其他部分。牢记 s/旧内容/新内容/ 规则。

  1. $ ls
  2. draft-minutes-2018-03 draft-minutes-2018-04 draft-minutes-2018-05
  3. $ rename 's/draft/approved/' *minutes*
  4. $ ls
  5. approved-minutes-2018-03 approved-minutes-2018-04 approved-minutes-2018-05

在上面的例子中注意到,当我们在 s/old/new/ 中使用 s 时,我们用另一个名称替换名称的一部分。当我们使用 y 时,我们就是直译(将字符从一个范围替换为另一个范围)。 

总结

现在有很多复制和重命名文件的方法。我希望其中的一些会让你在使用命令行时更愉快。

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2023-11-25 17:13:49

Linux重命名文件

2019-09-03 08:57:52

Linux命令软件

2009-12-22 15:28:51

Linux批量重命名文

2021-07-04 19:48:07

LinuxFreeDOS复制文件

2010-03-03 16:11:01

Linux ubant

2010-03-09 15:23:30

Linux批量重命名

2010-11-19 13:48:18

2019-11-11 10:20:10

Linux重命名命令

2011-03-04 09:48:21

PureFTPd

2018-10-31 15:30:11

Linux命令重命名

2023-08-01 08:26:24

Linux文件目录

2019-10-15 13:29:24

LinuxLinux命令

2009-05-26 12:23:56

Linux变量文件命名

2022-03-28 08:47:26

Skanlite扫描文件Linux

2017-03-01 14:16:36

Linux文件管理器隐藏文件

2021-01-31 18:51:11

移动重命名Python

2020-09-11 09:23:42

文件重命名Linux字符串

2020-06-09 07:42:30

重命名文件 Linux

2019-02-25 15:36:52

Linux复制文件远程系统

2021-12-12 09:19:16

find命令Linux
点赞
收藏

51CTO技术栈公众号