我有一个bash函数,我经常使用它以一种很好的格式列出文件和目录。问题是,每次执行该函数时,大约需要2-3秒才能完成数据列表。
当我两次调用find命令时,需要两倍的时间。我想问一下,如何将并行启动find命令作为线程然后获取输出。我认为这将使功能输出加载更快。我错了吗?
脚本:
function lsa
{
# Function to stat files and folders in current dir
# Takes first argument as directory to stat
# If no directory supplied, current dir assumed
if [ -z "$1" ];then
DIR="."
else
DIR="$1"
fi
# print directories first
printf "*** DIRECTORIES *** \n"
find "$DIR" -maxdepth 1 -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null
# print non-directories second
printf "*** FILES *** \n"
find "$DIR" -maxdepth 1 ! -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null
}
请告诉我。谢谢。
更新
进行更改:
*** DIRECTORIES ***
[1] 6882
*** FILES ***
[2] 6883
[1]- Done find . -maxdepth 1 -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null > dirs
[2]+ Done find "$DIR" -maxdepth 1 ! -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null > non-dirs
// And then the files and dirs one after other
不做任何更改:
borg@borg-cube:~$lsa
*** DIRECTORIES ***
// All directories
*** FILES ***
// All files
答案 0 :(得分:0)
通过在后台运行两个find命令并将其输出保存到不同的文件,您不能拥有多个线程,而是多个进程。然后wait
找到命令完成并连接输出(dirs first)。
这样......
find . -maxdepth 1 -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null > dirs &
...
find "$DIR" -maxdepth 1 ! -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null > non-dirs &
...
wait
cat dirs non-dirs
....
**更新**
最后将cat dirs non-dirs
替换为:
printf "*** DIRECTORIES *** \n"
cat dirs
printf "*** FILES *** \n"
cat non-dirs