Maison  >  Article  >  Tutoriel système  >  Utilisation efficace de deux commandes cp !

Utilisation efficace de deux commandes cp !

WBOY
WBOYavant
2024-01-02 12:53:591036parcourir
Présentation C'est une chose merveilleuse de pouvoir utiliser une interface graphique avec des clics de souris sous Linux... mais si votre environnement interactif de développement et votre compilateur préférés sont les fenêtres de terminal, Bash et Vim, alors vous devriez être comme moi Interagissez souvent avec le Terminal.

Même les personnes qui n'utilisent pas souvent le terminal peuvent bénéficier d'une compréhension approfondie de l'environnement du terminal. Par exemple, prenons la commande cp Selon Wikipedia, la commande cp (copier) faisait partie de la première version d'Unix. Avec un ensemble d'autres commandes ls, mv, cd, pwd, mkdir, vi, sh, sed et awk, la cp mentionnée était l'une des commandes que j'ai apprises lorsque j'ai découvert les systèmes System V Unix en 1984. L'utilisation la plus courante de la commande cp consiste à faire des copies de fichiers. Comme ça :

cp sourcefile destfile

Exécutez cette commande dans le terminal, la commande ci-dessus copiera le fichier nommé sourcefile dans le fichier nommé destfile. Si le fichier destfile n'existe pas avant l'exécution de la commande, il sera créé, s'il existe déjà, il sera écrasé.

Je ne sais pas combien de fois j'ai utilisé cette commande (je ne veux pas savoir), mais je sais que je l'utilise souvent lorsque j'écris du code de test afin de conserver la version normale actuelle et de continuer à modifier. ça, je vais entrer cette commande :

cp test1.py test1.bak

J'ai utilisé cette commande d'innombrables fois au cours des 30 dernières années. De plus, lorsque je décidais d'écrire ma deuxième version du programme de test, je tapais cette commande :

cp test1.py test2.py

Cela termine la première étape de modification du programme.

Je consulte généralement rarement la documentation de référence de la commande cp, mais lorsque je sauvegardais mon dossier d'images (en utilisant l'application "file" dans l'environnement GUI), j'ai commencé à penser "Y a-t-il un paramètre dans la commande cp qui ne prend en charge que Copiez les nouveaux fichiers ou les fichiers modifiés : "Effectivement, c'est le cas !

Utilisation efficace 1 : Mettez à jour vos dossiers

Par exemple, il y a un dossier sur mon ordinateur qui stocke divers fichiers. De plus, je dois y ajouter de nouveaux fichiers de temps en temps, et je modifierai certains fichiers de temps en temps, comme des photos ou de la musique téléchargée. depuis mon téléphone portable.

En supposant que les fichiers que je collecte sont tous précieux pour moi, j'ai parfois envie d'en faire une copie et de sauvegarder les fichiers sur d'autres supports comme un "instantané". Bien sûr, de nombreux programmes prennent en charge la sauvegarde, mais je souhaite copier plus précisément la structure des répertoires sur un périphérique amovible, afin de pouvoir souvent utiliser ces périphériques hors ligne ou les connecter à d'autres ordinateurs.

La commande

cp fournit un moyen simple de le faire. Les exemples sont les suivants :

Sous mon dossier Images, j'ai un dossier nommé Divers. Par souci d'illustration, j'ai copié les fichiers sur un périphérique de stockage USB. commençons!

me@desktop:~/Pictures$ cp -r Misc /media/clh/4388-D5FE
me@desktop:~/Pictures$

La commande ci-dessus est entièrement copiée depuis la fenêtre du terminal. Certaines personnes ne sont pas très adaptables à cet environnement. Avant de saisir ou d'exécuter une commande, nous devons faire attention au préfixe me@mydesktop:~/Pictures me est l'utilisateur actuel, mydesktop est le nom de l'ordinateur, ~/Pictures This. est le répertoire de travail actuel, qui est l'abréviation du chemin complet de /home/me/Pictures.

Je saisis cette commande cp -r Misc /media/clh/4388-D5FE et je l'exécute pour copier tous les fichiers du répertoire Misc (le paramètre -r, le nom complet est "récursif", traitement récursif, ce qui signifie tous les fichiers et sous-répertoires de ce répertoire) vers le répertoire de montage de mon périphérique USB/media/clh/4388-D5FE.

Retournez à l'invite précédente après l'exécution de la commande. La plupart des commandes héritent des caractéristiques d'Unix, s'il n'y a pas d'exception, aucun message d'invite du type "exécution réussie" ne s'affichera. la tâche se termine. Si vous souhaitez obtenir plus de commentaires, utilisez le paramètre -v pour rendre les résultats d'exécution plus détaillés.
L'image ci-dessous est le dossier Divers que je viens de copier depuis mon périphérique USB. Il contient un total de 9 images.
两个高效的cp 命令用法!

Image de la nouvelle copie de Misc sur la clé USB

Supposons que je souhaite ajouter de nouveaux fichiers sous le chemin de copie d'origine ~/Pictures/Misc, comme ceci :
两个高效的cp 命令用法!

Nouveaux fichiers ajoutés au répertoire maître

Maintenant, je souhaite copier uniquement les nouveaux fichiers sur mon périphérique de stockage, j'utilise donc les options "Mise à jour" et "Verbose" de cp.

me@desktop:~/Pictures$ cp -r -u -v Misc /media/clh/4388-D5FE
'Misc/asunder.png' -> '/media/clh/4388-D5FE/Misc/asunder.png'
'Misc/editing tags guayadeque.png' -> '/media/clh/4388-D5FE/Misc/editing tags guayadeque.png'
'Misc/misc on usb.png' -> '/media/clh/4388-D5FE/Misc/misc on usb.png'
me@desktop:~/Pictures$

La première ligne ci-dessus contient la commande cp et les paramètres spécifiques (-r est "récursif", -u est "update", -v est "verbeux"). Les trois lignes suivantes affichent des informations sur les fichiers copiés et la dernière ligne affiche l'invite de ligne de commande.

D'une manière générale, le paramètre -r peut également être utilisé dans le style plus verbeux --recursive. Mais de manière abrégée, -ruv peut également être utilisé conjointement avec cela.

Utilisation efficace 2 : sauvegarde de version

Pour en revenir à l'exemple initial, je sauvegarde régulièrement ma version de code pendant le développement. Ensuite, j'ai trouvé un autre paramètre cp qui fonctionne mieux.

假设我正在编写一个非常有用的 Python 程序,作为一个喜欢不断修改代码的开发者,我会在一开始编写一个程序简单版本,然后不停的往里面添加各种功能直到它能成功的运行起来。比方说我的第一个版本就是用 Python 程序打印出 “hello world”。这只有一行代码的程序就像这样:

print 'hello world'

然后我将这个代码保存成文件命名为 test1.py。我可以这么运行它:

me@desktop:~/Test$ python test1.py
hello world
me@desktop:~/Test$

现在程序可以运行了,我想在添加新的内容之前进行备份。我决定使用带编号的备份选项,如下:

clh@vancouver:~/Test$ cp --force --backup=numbered test1.py test1.py
clh@vancouver:~/Test$ ls
test1.py  test1.py.~1~
clh@vancouver:~/Test$

所以,上面的做法是什么意思呢?

第一,这个 --backup=numbered 参数意思为“我要做个备份,而且是带编号的连续备份”。所以一个备份就是 1 号,第二个就是 2 号,等等。

第二,如果源文件和目标文件名字是一样的。通常我们使用 cp 命令去拷贝成自己,会得到这样的报错信息:

cp: 'test1.py' and 'test1.py' are the same file

在特殊情况下,如果我们想备份的源文件和目标文件名字相同,我们使用 --force 参数。

第三,我使用 ls (意即 “list”)命令来显示现在目录下的文件,名字为 test1.py 的是原始文件,名字为 test1.py.~1~ 的是备份文件

假如现在我要加上第二个功能,在程序里加上另一行代码,可以打印 “Kilroy was here.”。现在程序文件 test1.py 的内容如下:

print 'hello world'
print 'Kilroy was here'

看到 Python 编程多么简单了吗?不管怎样,如果我再次执行备份的步骤,结果如下:

clh@vancouver:~/Test$ cp --force --backup=numbered test1.py test1.py
clh@vancouver:~/Test$ ls
test1.py test1.py.~1~ test1.py.~2~
clh@vancouver:~/Test$

现在我有有两个备份文件: test1.py.~1~ 包含了一行代码的程序,和 test1.py.~2~ 包含两行代码的程序。

这个很好用的功能,我考虑做个 shell 函数让它变得更简单。

最后总结

第一,Linux 手册页,它在大多数桌面和服务器发行版都默认安装了,它提供了更为详细的使用方法和例子,对于 cp 命令,在终端中输入如下命令:

man cp

对于那些想学习如何使用这些命令,但不清楚如何使用的用户应该首先看一下这些说明,然后我建议创建一个测试目录和文件来尝试使用命令和选项。

第二,兴趣是最好的老师。在你最喜欢的搜索引擎中搜索 “linux shell tutorial”,你会获得很多有趣和有用的资源。

第三,你是不是在想,“为什么我要用这么麻烦的方法,图形化界面中有相同的功能,只用点击几下岂不是更简单?”,关于这个问题我有两个理由。首先,在我们工作中需要中断其他工作流程以及大量使用点击动作时,点击动作可就不简单了。其次,如果我们要完成流水线般的重复性工作,通过使用 shell 脚本和 shell 函数以及 shell 重命名等功能就能很轻松的实现。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer