Bash IF 后脚本不按文件类型排序
Bash script does not sort by file type after IF
伙计们,我需要一些帮助。我有一个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)
但它似乎不起作用。
最简单的方法可能就是 运行 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
一个解决方案意味着您保持脚本基本不变:
#!/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
您可以选择在 "sort" 之后添加“ | cut -d':' -f2- ”以删除排序键。
伙计们,我需要一些帮助。我有一个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)
但它似乎不起作用。
最简单的方法可能就是 运行 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
一个解决方案意味着您保持脚本基本不变:
#!/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
您可以选择在 "sort" 之后添加“ | cut -d':' -f2- ”以删除排序键。