我整天都在写一些代码,但一直都不知道该怎么做,基本上,代码应该做的是输出一个 .csv 文件,其中包含倒数第二个 echo 语句中的所有数据,这些数据都是从中提取的/
。我不确定问题是什么,但它没有正确输出数据,并且发送了一堆关于du
andfind
命令的错误,说他们没有权限访问各种文件夹。
如果我的问题表达不清楚,我会澄清一下:)
代码如下:
#/bin/bash
cd /
#creates the list file
sudo touch ./home/etudiant/Desktop/main_list.txt
#lists all the files in /
find -maxdepth 1 -type d > ./home/etudiant/Desktop/main_list.txt
#adds one to the number of files in the list
let "list1=$(wc -l /home/etudiant/Desktop/main_list.txt | cut -f1 -d " ") + 1"
#self-explanatory
counter=1
while [ $counter -lt 25 ]
do
filename1=$(head -n $counter /home/etudiant/Desktop/main_list.txt | tail -n 1)
#goes to folder
cd /$filename1
#size of folder
size=$(du $filename1)
#number of regular files (recursive till the end of time)
reg_files=$(find -type f | wc -l)
#number of sub-folders
sub_folders=$(find -type d | wc -l)
#number of links
links=$(find -type l | wc -l)
#number of executables
executables=$(find -executable | wc -l)
echo "${filename1};{size};{reg_files};{sub_folders};{links};{executables}" 2>> /home/etudiant/Desktop/data.csv
((counter++))
done
sudo rm /home/etudiant/Desktop/main_list.txt
echo Execution Complete
答案1
你的剧本真的方式比实际需要的更复杂。而且您会收到错误(顺便说一句,如果您实际显示收到的错误,那真的很有帮助),因为您是以普通用户身份运行的,并且您的用户对 下的所有目录都没有读取权限。要避免这些错误,请以 root 身份运行脚本,或者通过在每个命令后(或调用脚本时)添加/
将错误重定向到。dev/null
2>/dev/null
script.sh 2>/dev/null
这是一个简化的版本:
#!/bin/bash
for d in /*/; do
size=$(du -s "$d" | cut -f1)
reg_files=$(find "$d" -type f | wc -l )
sub_folders=$(find "$d" -type d | wc -l)
links=$(find "$d" -type l | wc -l)
executables=$(find "$d" -executable | wc -l)
echo "${d};${size};${reg_files};${sub_folders};${links};${executables}"
done
一些一般说明:
- 在写入文件之前,您不需要先写入
touch
文件,只需写入即可。因此,您可以find -maxdepth 1 -type d > ./home/etudiant/Desktop/main_list.txt
直接完成,无需执行touch
,只是您一开始就不需要该文件。 - 您的 echo 需要
$
在每一个您告诉它打印的变量之前加上 。echo ${foo}{bar}
将会回显变量的值foo
,然后是字符串bar
,您需要echo ${foo}${bar}
回显两个变量的值。 - 正如我上面所说,为了避免错误,请使用 运行脚本
sudo
。