[英]Listing Directories on terminal with Perl
我正在嘗試寫一個perl襯板來列出目錄的內容,例如“ ls -l” Unix命令,但是我只想輸出目錄而不是文件
我已經設法使用perl腳本來做到這一點,但我想嘗試看看是否可以使用類似這樣的管道將其簡化為一行
ls -l | grep "something"
要么
ls -l | perl -...
到目前為止,我這樣做的方式是
#!/usr/bin/perl
open(LS_D, "ls -l |");
while(<LS_D>) {
print if /^d.*/; #print line if line starts with d
}
還可以告訴我為什么它可以與“ ls -l |”中的管道一起使用 但不是用“ ls -l”嗎?
謝謝
可以通過以下方式直接獲得目錄的長列表:
ls -ld */
無需過濾輸出。
至於|
,這就是告訴開放打開進程並替換其STDIN
或STDOUT
對於三個或更多參數,如果MODE為
|-
,則文件名解釋為將輸出傳遞到的命令,如果MODE為-|
,文件名被解釋為將輸出通過管道傳遞給我們的命令。 在二參數(和一參數)形式中,應使用命令替換破折號(-
)。 有關更多示例,請參見在perlipc中為IPC使用open() 。
沒有|
,因此與open(LS_D, "ls -l")
你試圖打開一個文件 ,名稱為'ls -l'
建議使用三個參數open
,以及其詞匯文件句柄,
open my $read_fh, '-|', 'ls', '-l';
帶有參數的命令以列表形式提供。
最后,Perl腳本中的內容可以用單行代碼完成,例如
perl -we'print grep { /^d/ } `ls -l`'
但是,如上所示,您可以在命令行中直接通過ls
獲得它。
我應該加上
始終有use warnings;
並use strict;
在程序的頂部
經常檢查像open
一樣的呼叫,您會知道失敗的原因,並查看失敗的原因
open my $fh ... or die "Can't open ... : $!";
請參閱perlvar中的錯誤變量以獲取$!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.