壓縮檔案小測試

[華語, cmn-Hant-TW]

要把一些舊東西壓一壓,正好可以來測一下哪種格式壓起來效果最好。
原始檔案是事先打包好的 tar 檔,大小為 1,089,927 KB。

格式 參數 大小
zip 預設值 464,597 KB
7z 預設值 286,850KB
gzip 預設值 473,692KB
bz2 預設值 453,056KB
lzma (lzma1) 預設值 314,828KB
xz (lzma2) 預設值 314,199KB
xz (lzma2) -9, –extreme 217,252KB

其中 7z 和 zip 是在 windows 7/x64 下壓的結果,而 gzip, bzip2, lzma 及 xz 是在 FreeBSD 8.0/amd64 得到的結果,
因為測試的機器及平台相差有大到,所以也就沒有特別去算壓縮解壓縮的時間了。不過下 -9 –extreme 這個極限壓縮參數花的時間很明顯比用預設值長很多,雖然說壓縮比的差異也很明顯就是。

Posted in Development. Tags: , , , , , , . No Comments »

Conditional Expressions

[華語, cmn-Hant-TW]

每次都會忘記,記錄一下省得每次都要用 Google 找半天

BASH

-a file ~ True if file exists.

-b file ~ True if file exists and is a block special file.

-c file ~ True if file exists and is a character special file.

-d file ~ True if file exists and is a directory.

-e file ~ True if file exists.

-f file ~ True if file exists and is a regular file.

-g file ~ True if file exists and its set-group-id bit is set.

-h file ~ True if file exists and is a symbolic link.

-k file ~ True if file exists and its “sticky” bit is set.

-p file ~ True if file exists and is a named pipe (FIFO).

-r file ~ True if file exists and is readable.

-s file ~ True if file exists and has a size greater than zero.

-t fd ~ True if file descriptor fd is open and refers to a terminal.

-u file ~ True if file exists and its set-user-id bit is set.

-w file ~ True if file exists and is writable.

-x file ~ True if file exists and is executable.

-O file ~ True if file exists and is owned by the effective user id.

-G file ~ True if file exists and is owned by the effective group id.

-L file ~ True if file exists and is a symbolic link.

-S file ~ True if file exists and is a socket.

-N file ~ True if file exists and has been modified since it was last read.

file1 -nt file2 ~ True if file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not.

file1 -ot file2 ~ True if file1 is older than file2, or if file2 exists and file1 does not.

file1 -ef file2 ~ True if file1 and file2 refer to the same device and inode numbers.

-o optname ~ True if shell option optname is enabled. The list of options appears in the description of the -ooption to the set builtin (see The Set Builtin).

-z string ~ True if the length of string is zero.

-n string ~ True if the length of string is non-zero.

string1 == string2 ~ True if the strings are equal. ‘=’ may be used in place of ‘==’ for strict posix compliance.

string1 != string2 ~ True if the strings are not equal.

string1 < string2 ~ True if string1 sorts before string2 lexicographically in the current locale.

string1 > string2 ~ True if string1 sorts after string2 lexicographically in the current locale.

arg1 OP arg2 ~ OP is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators return true if arg1 is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to arg2, respectively. Arg1 and arg2 may be positive or negative integers.

資料來源: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Conditional-Expressions

TCSH

-r   Read access
-w   Write access
-x   Execute access
-X   Executable in the path or shell builtin, e.g., `-X ls' and  `-X
	       ls-F' are generally true, but `-X /bin/ls' is not (+)
-e   Existence
-o   Ownership
-z   Zero size
-s   Non-zero size (+)
-f   Plain file
-d   Directory
-l   Symbolic link (+) *
-b   Block special file (+)
-c   Character special file (+)
-p   Named pipe (fifo) (+) *
-S   Socket special file (+) *
-u   Set-user-ID bit is set (+)
-g   Set-group-ID bit is set (+)
-k   Sticky bit is set (+)
-t   file  (which  must be a digit) is an open file descriptor for a
	       terminal device (+)
-R   Has been migrated (convex only) (+)
-L   Applies subsequent operators in a multiple-operator test  to  a
	       symbolic  link rather than to the file to which the link points
	       (+) *
資料來源 FreeBSD tcsh manual pages
Posted in Development. Tags: , , , , . No Comments »

傳參數給 File::Find::find 的 wanted 函數

[華語, cmn-Hant-TW]

有用到順便記一下,參考這個網頁的討論,應該這樣寫即可

File::Find::find( {wanted =&gt; sub { wanted($arg) }}, $dir);
sub wanted {
  my ( $arg ) = $_;
  ...
}

$arg 即為要傳的參數,$dir 是搜尋目錄。當然參數要傳 reference 也是可以的,像是傳陣列就把參數改成 \@array 之類的即可,丟 reference 的原因是 wanted 函數不會回傳東西,要把處理後東西挖出來就得用這個方法。

Posted in Development. Tags: . No Comments »

svn:externals

[客家話, hak-Hant-TW]

記一下,按仔才毋會記毋得。

svn propedit svn:externals $DIR

過來就會跳到編輯程式,一條一條加要連結的項目進去就可以了,像按仔:

dir_a svn://source/projects/PROJ_A/trunk/liba
dir_b svn://source/projects/PROJ_B/trunk/appb

存起來,下擺 svn update 那下就會自動捉最新的版本下來了,是講會修改就再度打 svn propedit 就做得了。

Posted in Development. Tags: . No Comments »

C 的參數個數不定函數

[華語, cmn-Hant-TW]

不常用,剛剛好有要用到,記一下。
用在要把輸入重新包裝丟給sprintf的時候
(不過這邊應該是給 vsprintf 才對)

首先是會用到 stdarg.h。
直接看 code 比較快,大致上就是用 va_list 宣告一個串列,然後用 va_start() 指到第一個參數,用完之後呼叫 va_end() 就可以了,其他的功能這邊用不到。

info( char* format, ... ) {
  char buffer[1024];
  va_list args;
  va_start( args, format );
  vsprintf( buffer, format, args );
  va_end( args );
}
Posted in Development. Tags: , , . No Comments »