IF之后,Bash脚本不按文件类型排序

时间:2015-05-09 15:15:24

标签: linux bash scripting

我需要一些帮助,伙计们。我有一个bash代码

#!/bin/bash
echo "Iveskite kataloga, kurio analize norite atlikti"
read katalogas
failai=$(find -x $katalogas)
for failas in $failai
do
  if [[ -d "$failas" ]]
  then 
    echo $failas " yra direktorija "
  else
    if [[ -x "$failas" ]]
    then
      echo $failas " yra vykdomasis failas "
    else
      if [[ -f "$failas" ]]
      then
        echo $failas " yra paprastasis failas "
      fi
    fi
  fi
done

我想说,最终结果将按文件类型排序。我这样做:failai=$(find -x $katalogas)但似乎没有用。

2 个答案:

答案 0 :(得分:2)

一种解决方案,意味着您的脚本大部分保持不变:

#!/bin/bash
echo "Iveskite kataloga, kurio analize norite atlikti"
read katalogas
failai=$(find -x $katalogas)
typeD=fileslist1
typeX=filelist2
typeF=filelist3
> $typeD
> $typeX
> $typeF
for failas in $failai
do
  if [[ -d "$failas" ]]
  then 
    echo $failas " yra direktorija " >> $typeD
  else
    if [[ -x "$failas" ]]
    then
      echo $failas " yra vykdomasis failas " >> $typeX
    else
      if [[ -f "$failas" ]]
      then
        echo $failas " yra paprastasis failas " >> $typeF
      fi
    fi
  fi
done
cat $typeD $typeX $typeF

或者,为避免写入文件并使用" sort",您需要相应地在输出中添加排序键,即更改" D:" " X:"和" F:"根据需要修改订单:

#!/bin/bash
echo "Iveskite kataloga, kurio analize norite atlikti"
read katalogas
failai=$(find -x $katalogas)

for failas in $failai
do
  if [[ -d "$failas" ]]
  then 
    echo "A: $failas  yra direktorija "
  else
    if [[ -x "$failas" ]]
    then
      echo "X: $failas yra vykdomasis failas "
    else
      if [[ -f "$failas" ]]
      then
        echo "F: $failas yra paprastasis failas "
      fi
    fi
  fi
done | sort

您可以选择添加" | cut -d':' -f2-"经过"排序"删除排序键。

答案 1 :(得分:1)

只运行find三次可能最简单。 (这也避免了在尝试将所有找到的文件名存储在单个列表中时可能出现的任何问题,例如文件名包含空格。)除非katalogas包含 lot 文件,这不太可能是你的脚本的瓶颈。

echo "Iveskite kataloga, kurio analize norite atlikti"
read katalogas
# First, get the directories
find -x "$katalogas" -type d
# Next, get anything with a permission bit set
# Ignore directories you already found
find -x "$katalogas" -not -type d -perm -111
# Find any regular files not matched by the above
find -x "$katalogas" -not -type d -not -perm -111 -type f