通过.sh和.txt .gz将一个目录中的文件分隔为不同的文件

时间:2014-10-09 17:05:08

标签: shell unix

我想将当前工作目录文件复制到各个文件,如下所示。 .sh文件---> sh_files .txt文件---> txt_files

我确实尝试使用以下脚本,但遇到了一些错误 “cut:txt.1a:没有这样的文件或目录” 任何人都有这个scenario.suggest的备用脚本....

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

2 个答案:

答案 0 :(得分: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仅搜索没有子目录的此目录

答案 1 :(得分: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