2014-02-05 68 views
0

我正在使用以下命令並且收到錯誤「arg list too long」。需要幫助。我在unix中收到錯誤「arg list too long」

find ./* \ 
    -prune   \ 
    -name "*.dat" \ 
    -type f  \ 
    -cmin +60  \ 
    -exec basename {} \; 
+1

嘗試'find ./ -name「* .dat」-type f -cmin +60 -exec basename {} \;' –

+0

需要使用star來獲取期望的輸出... @МалъСкрылевъ – onkar89

+0

你爲什麼需要它?哪個輸出是你想要的? –

回答

2

這裏是修復

find . -prune -name "*.dat" -type f -cmin +60 |xargs -i basename {} \; 
0

如果僅顯示.DAT名在./樹。執行它沒有-prune選項,只使用路徑:

find ./ -name "*.dat" -type f -cmin +60 -exec basename {} \; 

要找到所有的.DAT文件這是在本目錄超過60分鐘僅得做如下:

find . -iregex "./[^/]+\.dat" -type f -cmin +60 -exec basename {} \; 

而且如果你已經croppen(例如)的工具版本如下操作:

find . -name "*.dat" -type f -cmin +60 | grep "^./[^/]\+dat" | sed "s/^.\///" 
+0

我猜如果OP被困在AIX'find'上,它也不會支持'-iregex'。 – tripleee

1

在所有* nix系統中,shell具有可傳遞給命令的最大參數長度。這是在shell在命令行上擴展文件名作爲參數後測量的。

find的語法是find location_to_find_from arguments....。所以當你運行這個命令時,shell會將你的./*擴展爲當前目錄中所有文件的列表。這會將您的查找命令行擴展爲find file1 file2 file3 etc etc這可能不是您想要的,因爲無論如何,查找都是遞歸的。我期望你在一個大目錄中運行這個命令並且縮短了你的命令長度限制。

嘗試運行命令如下

find . -name "*.dat" -type f -cmin +60 -exec basename {} \;

這將防止文件名擴展這可能是導致您的問題。

+0

檢查了這個wms/files/hostin:> find ./ -prune -n​​ame「* .dat」-type f -cmin +60 -exec basename {} \; wms/files/hostin:> find ./* -prune -n​​ame「* .dat」-type f -cmin +60 -exec basename {} \; DPART_ITEM_0009_0003599.dat DPART_ITEM_0099_0002016.dat DPART_ITEM_0099_0002083.dat FOOT_ITEM_0009_0003599.dat FOOT_ITEM_0099_0002016.dat FOOT_ITEM_0099_0002083.dat PART_ITEM_0009_0003599.dat PART_ITEM_0099_0002016.dat PART_ITEM_0099_0002083.dat WMS /文件/ hostin:>找到。 -prune -n​​ame「* .dat」-type f -cmin +60 | xargs -i basename {} wms/files/hostin:> – onkar89

+0

對不起。刪除了修剪 –

+0

如果我使用find ./*我得到的輸出在一個目錄中,但在其他目錄中它說:「Arg列表太長,如果我使用find ./並刪除*,那麼我沒有得到任何輸出。 – onkar89

2

要僅查找當前目錄中的文件,請使用-maxdepth 1

find . -maxdepth 1 -name '*.dat' -type f -cmin +60 -exec basename {} \; 
+0

最大深度不是有效的參數 – onkar89

+0

更合適的是,它是一個GNU擴展。 – tripleee

+0

你在哪個操作系統上運行?而maxdepth是一個單詞。 –

0

沒有找到,只檢查當前目錄

now=$(date +%s) 
for file in *.dat; do 
    if (($now - $(stat -c %Y "$file") > 3600)); then 
     echo "$file" 
    fi 
done 

這工作我的GNU系統。您可能需要更改不同操作系統的日期和統計格式