2014-10-09 63 views
0

我想將當前的工作目錄文件複製到下面的相應文件中。 sh文件---> sh_files .txt文件---> txt_files將.sh和.txt中的一個目錄中的文件分離到不同的文件.gz

我曾嘗試下面的腳本,但得到一些錯誤 「斬:txt.1a:沒有這樣的文件或目錄」 可以在任何有此場景的備用腳本。在此上提示...。

ls -f >list_files.txt 
for i in `cat list_files.txt` 
do 
rev1=`echo $i | rev` 
k=`cut -c 1-3 $rev1` 
if[ "$k"= ".sh"] 
then 
echo $i >file_sh.txt 
else 
echo $i >file_txt.txt 
fi 
done 
+0

這有什麼錯'CP * .SH sh_files /; cp * .txt txt_files/.'?或者,如果你只是想要文件名 - 'ls -1 * .txt> txt_files; ls -1 * .sh> sh_files' ... – twalberg 2014-10-09 19:46:07

回答

1

使用rev和cut提取擴展可能比它需要更復雜。這是一個通過刪除所有內容直到幷包括最後一個'。'來計算擴展名的版本。在文件名中。我也使用>>而不是>,以便結果被附加,而不是覆蓋輸出文件。

#!/bin/bash 

ls -f >list_files.txt 

for i in $(cat list_files.txt) 
do 
    ext="${i/*./}" 

    if [ "$ext" = "sh" ]; then 
     echo $i >>file_sh.txt 
    elif [ "$ext" = "txt" ]; then 
     echo $i >>file_txt.txt 
    else 
     echo $i >>file_other.txt 
    fi 
done 
2

,而無需編寫額外的list_files.txt

#!/bin/bash 

find . -maxdepth 1 -type f | while read i 
do 
    ext="${i/*./}" 

    if [ "$ext" = "sh" ]; then 
     echo $i >>file_sh.txt 
    elif [ "$ext" = "txt" ]; then 
     echo $i >>file_txt.txt 
    else 
     echo $i >>file_other.txt 
    fi 
done 

-maxdepth 1限制find搜索沒有子目錄只有這個目錄

+0

達斯汀,你爲什麼要編輯答案,這是我的一個微不足道的副本,夥計? – 2014-10-10 01:26:58

+0

對不起 - 只是想顯示一個替代方案,而不寫一個單獨的中間文件。我認爲,find方式比使用ls來限制文件類型要好。 但我應該寫,這是基於你的解決方案。 所以 - 您的解決方案非常好,我會用我的優化解決方案。 – roylicht 2014-10-10 04:17:42

+0

隨時添加署名。您也可以將您的答案轉換爲社區wiki,因爲這是幾個人的工作。 – 2014-10-10 16:11:32

相關問題