請問 cp 的逸事 - Linux

Table of Contents

一開始,我 copy 一百個以數字為檔名的檔案 (001.jpg, 002.jpg, 003.jpg,

... 099.jpg, 100.jpg),copy 到隨身碟上。

cp source_direction/* target_direction

瞬間,一秒就完成,可是我要拔隨身碟的時候,等 sync 等了好些時候。

後來,我發現 target_direction 目錄裡面的檔案,並不是按照檔名順序排的。

就是說:非 001.jpg, 002.jpg, 003.jpg, 004.jpg, 005.jpg, ....

而是這樣排 045.jpg, 082.jpg, 034.jpg, 017.jpg, 062.jpg, ....

檔案都有,但是就是看不出來,是依時間,或是大小 copy 進去的。

後來我全殺掉 rm -f target_direction/*

然後再 copy 乙次

cp source_direction/0??.jpg target_direction

這時,怪事出現了,他真的是一個一個 copy,按照檔名的順序來 copy

不會像上次一樣,立刻出現提示符號,然後再慢慢 sync

而是真的寫入一個,再寫入一個,(因為我開另一個終端機, ls 看他真的慢慢 copy)

我猜想, cp * 的時候,他是開多個線程(我猜的),一股腦,不依順序,趕快 copy

然後呢, cp ? 的時候,則是尋到符合的,然後才 copy 進去,所以會照檔名順序

不知道,有否專研 kernel 的大大,可以公佈正確解答嗎?


--

All Comments

Callum avatarCallum2009-10-12
ftp://ftp.gnu.org/gnu/coreutils/coreutils-5.0.tar.gz
Margaret avatarMargaret2009-10-12
有興趣可以看原始碼歐
William avatarWilliam2009-10-14
樓上太威了...
Michael avatarMichael2009-10-15
* 和 ? 是shell的事,和cp指令無關,欲之詳情
Elvira avatarElvira2009-10-15
請見UNIX PowerTools 這本書(有中譯本)
Bennie avatarBennie2009-10-17
O'reilly
John avatarJohn2009-10-21
忘記說,作者之一就是O'reilly的老闆Tim O'Reilly