我见过install很多 Makefile 中使用的命令,它的存在和用法有点令人困惑。从联机帮助页来看,它似乎是一个cp功能较少的仿制品,但我认为除非它比cp. 这是怎么回事?
如何将具有共同文件的目录从一个分区移动到另一个分区?
让我们假设我们已经挂载了/mnt/X带有硬链接共享文件的目录的分区。如何将这些目录移动到另一个分区,让它/mnt/Y保留那些硬链接。
为了更好地说明“与硬链接共享文件的目录”是什么意思,这里是一个例子:
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
Run Code Online (Sandbox Code Playgroud)
更具体地说,假设文件的总大小为 10G,每个文件有 10 个硬链接。问题是如何使用 10G 将它移动到目的地(有人可能会说用 100G 复制它然后运行重复数据删除 - 这不是我要问的)
我是研究生,我所在的小组维护一个 Linux 集群。集群的每个节点都有自己的本地磁盘,但是这些本地磁盘比较小,没有配备自动备份。因此,该组拥有一个具有许多 TB 存储空间的文件服务器。我是一个相对的 Linux 新手,所以我不确定文件服务器在速度、网络能力等方面的规格是什么。我从经验中知道本地磁盘在 I/O 方面比文件服务器快得多. 大约有十几个人使用文件服务器。
使用cp将大约 20 GB 的文件从文件服务器复制到其中一个本地磁盘平均需要大约 11.5 分钟的实时时间(根据time)。我知道这个cp操作效率不高,因为(1)time告诉我这样一个副本的系统时间只有~45秒;并且因为 (2) 当我top在复制过程中检查时,%CPU非常低(通过检查,平均约为0-10%)。
使用cp将相同的 ~20 GB 文件从本地磁盘上的一个文件夹复制到同一本地磁盘上的另一个文件夹需要更少的时间 - 实时大约 9 分钟(系统时间约为 51 秒,根据time)。因此,显然文件服务器比本地磁盘慢一些,正如预期的那样,但可能不会明显变慢。我很惊讶从本地复制到同一本地的速度不超过 9 分钟。
我需要将 ~200 个大文件(每个 ~20 GB)从文件服务器复制到本地磁盘之一。所以,我的问题是:在 Linux 中复制大文件有没有更快的替代方法cp? (或者cp我可以使用任何标志来加速复制?)即使我可以以某种方式将这个复制时间缩短一分钟,这也会有很大帮助。
我确信购买新的、速度更快的硬件磁盘,但我无法访问此类资源。我也不是系统管理员——我只是一个(新手)用户——所以我无法访问有关磁盘负载的更详细信息。我知道虽然每天大约有十几个人使用文件服务器,但我是唯一使用这个特定节点/本地磁盘的人。
在命令行上是否有更好的方法来基本上完成以下操作,但使用单个命令
cp -r css/ ar/
cp -r images/ ar/
cp -r js/ ar/
cp -r backups/ ar/
Run Code Online (Sandbox Code Playgroud)
我只是用分号将它们串在一起。
我想将具有多个扩展名的文件复制到一个目标目录。
例如,我可以使用以下命令将工作目录中的所有.txt文件复制到名为 的目录destination:
cp -v *.txt destination/
Run Code Online (Sandbox Code Playgroud)
我可以使用以下内容将工作目录中的所有.png目录复制到destination:
cp -v *.png destination/
Run Code Online (Sandbox Code Playgroud)
但是将它们作为单独的命令键入很耗时(即使使用命令历史记录)。那么,有什么方法可以告诉我cp将带有模式*.txt 或模式的文件复制*.png到destination? 理想情况下,我希望能够指定两个以上的模式——例如,指示cp将所有*.txt 或 *.png 或 *.jpg文件复制到destination。
我确信所有这些都可以使用 shell 脚本实现——bash例如,我正在使用——但是有没有什么方法可以更简单地完成它,仅从控制台?我可以以某种方式使用大括号扩展来做到这一点吗?
我知道这是可能的所有文件复制除了匹配某些特定模式的工作目录,但由于我的工作目录含有更多的文件扩展名,我不希望比我复制这样做,那将是一个痛苦。
你对此有什么想法吗?
手册页cp(1)说
--no-clobber不要覆盖现有文件
但是,下面的场景是不是可能呢?
cp 检查文件是否存在,假设文件不存在(还)cp不知道现在存在的文件,它会覆盖数据是否cp --no-clobber容易受到这种竞争状态?如果没有,如何cp避免上述情况?
目前,我正在运行这两个命令来创建目录的快速备份。有没有办法将这两个命令合二为一,以便我在一个命令中复制和重命名新目录?
#cp -R /tf/Custom_App /tf/Custom_App_backups/
#mv /tf/Custom_App_backups/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21
Run Code Online (Sandbox Code Playgroud) 我cp使用以下命令进行了测试:
$ ls
first.html second.html third.html
$ cat first.html
first
$ cat second.html
second
$ cat third.html
third
Run Code Online (Sandbox Code Playgroud)
然后我复制first.html到second.html:
$ cp first.html second.html
$ cat second.html
first
Run Code Online (Sandbox Code Playgroud)
该文件second.html被无声地覆盖,没有任何错误。但是,如果我通过拖放具有相同名称的文件在桌面 GUI 中执行此操作,它将first1.html自动添加后缀。这可以避免意外覆盖现有文件。
为什么不cp遵循这种模式而不是默默地覆盖文件?
我需要复制和覆盖大量文件,我使用了以下命令:
# cp -Rf * ../
Run Code Online (Sandbox Code Playgroud)
但是每当目标文件夹中存在同名文件时,我都会收到这个问题:
cp: overwrite `../ibdata1'?
Run Code Online (Sandbox Code Playgroud)
问题是我有大约 200 个文件将被覆盖,我认为按Y then Enter200 次不是正确的方法。
那么,正确的方法是什么?