簡體   English   中英

Perl在終端上列出目錄

[英]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 */

無需過濾輸出。

至於| ,這就是告訴開放打開進程並替換其STDINSTDOUT

對於三個或更多參數,如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM