2012-01-10 49 views
0

我需要從Perl腳本中的find命令中獲取示例文件文件,以創建另一個系統調用。由於某種原因,當我從腳本調用它時,find命令會卡住。以下是我需要做的:在perl中解析查找調用的第一個條目?

my $search_dir = "/something/like/this/??/??/??"; 
# the triple '??' are needed here 
my $cmd = "find $search_dir -name \"\*.$var1.token1.$var2.ext\" | head -n 1"; 
my $first_example_file = `$cmd`; chomp $first_example_file; 

,當我經過的Perl運行此卡,它從來沒有執行完的命令,而建造$ cmd在任何時間運行,如果我複製+粘貼並運行在我的bash終端。有任何想法嗎?

+0

你的意思是「卡住」,究竟是什麼意思? – 2012-01-10 16:10:57

+0

它永遠不會執行該命令 – 719016 2012-01-10 16:20:41

+0

嘗試直接從命令行執行'$ cmd'。 – 2012-01-10 16:22:13

回答

5

嘗試使用File::Find perl模塊查找文件。如果你想在你的perl中使用bash's find,那麼你可能必須在你的命令中使用$(..)。我不是perl ...只是想幫助。

更新:

正如Rohaq在評論中指出,你也可以使用File::Find::Rule

+1

File :: Find很不錯,不過我更喜歡File :: Find :: Rule在運行之前設置搜索。 /~rclamp/File-Find-Rule-0.33/lib/File/Find/Rule.pm – Rohaq 2012-01-10 17:06:18

+0

Thanks @Rohaq ...在答案中加了你的建議,希望那就行了 – 2012-01-10 17:11:23

+0

All good,cheers! – Rohaq 2012-01-10 17:24:59

1

我打賭通配符(外殼通配符擴展)參與。但不管如何,試着將命令切碎。沒有管道工作嗎?沒有這個怎麼樣?在路徑名?如果你在前面加上'echo'(「echo find ...」)會怎麼樣?還掛着?然後你可以在perl -d下面試試它 - 調試器; perldoc perldebug是你的朋友。