ホームページ  >  記事  >  システムチュートリアル  >  2つのcpコマンドの効率的な使い方!

2つのcpコマンドの効率的な使い方!

WBOY
WBOY転載
2024-01-02 12:53:59983ブラウズ
###導入### Linux 上でマウスのクリックだけでグラフィカル インターフェイスを使用できるのは素晴らしいことです...しかし、お気に入りの対話型開発環境とコンパイラがターミナル ウィンドウ、Bash、および Vim である場合は、これらを使用する必要があります。私と同じくらい頻繁に端末を使用します。

端末をあまり使用しない人でも、端末環境を深く理解することで多くの利益を得ることができます。たとえば、cp コマンドを例に挙げると、Wikipedia によると、cp (コピー) コマンドは Unix の最初のバージョンの一部でした。他の一連のコマンド ls、mv、cd、pwd、mkdir、vi、sh、sed、awk とともに、前述の cp は、私が 1984 年に System V Unix システムを紹介したときに学んだコマンドの 1 つです。 cp コマンドの最も一般的な使用法は、ファイルのコピーを作成することです。このような:### リーリー

ターミナルでこのコマンドを実行します。上記のコマンドは、sourcefile という名前のファイルを destfile という名前のファイルにコピーします。コマンド実行前に destfile ファイルが存在しない場合は作成され、既に存在する場合は上書きされます。

このコマンドを何回使ったか分かりません (知りたくない) ですが、テストコードを書くときに頻繁に使用していることはわかっています。現在の通常バージョンを保持して続行するためこれを変更するには、次のコマンドを入力します:

リーリー

私は過去 30 年間にこのコマンドを数え切れないほど使用してきました。また、テスト プログラムの 2 番目のバージョンを作成することに決めたときは、次のコマンドを入力します:

リーリー

これで、プログラムを変更する最初のステップが完了しました。

私は cp コマンドのリファレンス ドキュメントを見ることはほとんどありませんが、イメージ フォルダーを (GUI 環境の「ファイル」アプリケーションを使用して) バックアップしているときに、「cp コマンドにパラメーターがあるのではないか?」と疑問に思い始めました。 「新しいファイルまたは変更されたファイルのみのコピーをサポートします。」 案の定、それは可能です。

効率的な使用法 1: フォルダーを更新する たとえば、コンピューター上にさまざまなファイルを保存するフォルダーがあります。さらに、そのフォルダーに時々新しいファイルを追加する必要があり、写真やファイルなどの一部のファイルを随時変更する必要があります。携帯電話からダウンロードした写真、音楽。

収集したファイルがすべて私にとって価値があると仮定すると、ファイルをコピーして「スナップショット」のように他のメディアに保存したいことがあります。もちろん、バックアップをサポートするプログラムはたくさんありますが、これらのオフライン デバイスを頻繁に使用したり、他のコンピュータに接続したりできるように、ディレクトリ構造をリムーバブル デバイスにより正確にコピーしたいと考えています。

cp コマンドを使用すると、これを簡単に行うことができます。例は次のとおりです。

私の写真フォルダーには、その他という名前のフォルダーがあります。説明のために、ファイルを USB ストレージ デバイスにコピーしました。はじめましょう!

リーリー

上記のコマンドは、ターミナル ウィンドウから完全にコピーされています。この環境にあまり適応できない人もいます。コマンドを入力または実行する前に、接頭辞 me@mydesktop:~/Pictures に注意する必要があります。me は現在のユーザー、mydesktop はコンピュータ名、~/Pictures です。現在の作業ディレクトリ。/home/me/Pictures の完全パスの省略形です。

コマンド cp -r Misc /media/clh/4388-D5FE を入力して実行し、Misc ディレクトリ内のすべてのファイルをコピーします (-r パラメータ、完全名は「recursive」、再帰的処理を意味します)。このディレクトリとサブディレクトリ内のすべてのファイル) を USB デバイスのマウント ディレクトリ/media/clh/4388-D5FE にコピーします。

コマンドの実行後は前のプロンプトに戻ります。ほとんどのコマンドは Unix の特性を継承しています。コマンドの実行後、例外がない場合は何も表示されません。「実行に成功しました」のようなプロンプトは表示されません。タスクが終了する情報。さらにフィードバックを取得したい場合は、-v パラメーターを使用して実行結果をより詳細にします。

下の写真は、USB デバイスからコピーした Misc フォルダーです。この中には合計 9 枚の写真があります。

两个高效的cp 命令用法!

USB ドライブ上のその他の新しいコピーのイメージ

次のように、元のコピー パス ~/Pictures/Misc にいくつかの新しいファイルを追加するとします。


两个高效的cp 命令用法!新しいファイルがマスター ディレクトリに追加されました

ここで、新しいファイルのみをストレージ デバイスにコピーしたいので、cp の "Update" および "Verbose" オプションを使用します。

リーリー

上の最初の行は、cp コマンドと特定のパラメータです (-r は「再帰」、-u は「更新」、-v は「冗長」です)。次の 3 行にはコピーされたファイルに関する情報が表示され、最後の行にはコマンド ライン プロンプトが表示されます。

一般的に、パラメータ -r は、より詳細なスタイル --recursive でも使用できます。ただし、簡単に言えば、-ruv をこれと組み合わせて使用​​することもできます。

効率的な使用法 2: バージョンのバックアップ

最初の例に戻りますが、私は開発中にコード バージョンを定期的にバックアップします。その後、より効果的に機能する別の cp パラメータを見つけました。

假设我正在编写一个非常有用的 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 重命名等功能就能很轻松的实现。

以上が2つのcpコマンドの効率的な使い方!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。