Linux 要在每个文件夹中运行的bash脚本

Linux 要在每个文件夹中运行的bash脚本,linux,bash,shell,awk,sed,Linux,Bash,Shell,Awk,Sed,我需要在每个文件夹中运行bash脚本,但如何才能做到最好 这是需要在每个文件夹中运行的脚本 此外,我还需要跟踪文件夹中的文件与$Title #!/bin/bash rm -f output2.txt rm -f output3.txt ls -td $PWD/test/*.pdf |head -5 >> output2.txt ls -t test/ | sed -e 's/\.[^.]*$//' | head -5 >> output3.txt output2=out

我需要在每个文件夹中运行bash脚本,但如何才能做到最好

这是需要在每个文件夹中运行的脚本 此外,我还需要跟踪文件夹中的文件与$Title

#!/bin/bash

rm -f output2.txt
rm -f output3.txt
ls -td $PWD/test/*.pdf |head -5 >> output2.txt
ls -t test/ | sed -e 's/\.[^.]*$//' | head -5 >> output3.txt
output2=output2.txt
output3=output3.txt


download_one=$(awk 'FNR==1' $output2)
download_two=$(awk 'FNR==2' $output2)
download_three=$(awk 'FNR==3' $output2)
download_four=$(awk 'FNR==4' $output2)
download_five=$(awk 'FNR==5' $output2)

download_one_title=$(awk 'FNR==1' $output3)
download_two_title=$(awk 'FNR==2' $output3)
download_three_title=$(awk 'FNR==3' $output3)
download_four_title=$(awk 'FNR==4' $output3)
download_five_title=$(awk 'FNR==5' $output3)

rm -f output2.txt
rm -f output3.txt

Title=
Title2=$Title

echo $Title,$Title2,$download_one_title,$download_one,$download_two_title,$download_two,$download_three_title,$download_three,$download_four_title,$download_four,$download_five_title,$download_five >> test.csv
第二 错误

第二代码

    #!/bin/bash

curdir=$(pwd)
for folder in /home/intranet/test/*; do
    [ -d $folder ] && cd "$folder" && $curdir/script
done
cd $curdir

rm -f output2.txt
rm -f output3.txt
ls -td $PWD/test/*/*.pdf |head -5 >> output2.txt
ls -t test/ | sed -e 's/\.[^.]*$//' | head -5 >> output3.txt
output2=output2.txt
output3=output3.txt


download_one=$(awk 'FNR==1' $output2)
download_two=$(awk 'FNR==2' $output2)
download_three=$(awk 'FNR==3' $output2)
download_four=$(awk 'FNR==4' $output2)
download_five=$(awk 'FNR==5' $output2)

download_one_title=$(awk 'FNR==1' $output3)
download_two_title=$(awk 'FNR==2' $output3)
download_three_title=$(awk 'FNR==3' $output3)
download_four_title=$(awk 'FNR==4' $output3)
download_five_title=$(awk 'FNR==5' $output3)

rm -f output2.txt
rm -f output3.txt

Title=lol
Title2=$Title

echo $Title,$Title2,$download_one_title,$download_one,$download_two_title,$download_two,$download_three_title,$download_three,$download_four_title,$download_four,$download_five_title,$download_five >> test.csv

“正常查找”完成您的工作,您可以指定更多选项来筛选文件夹,如“时间”或“访问”…

我必须将其放在单独的脚本中还是放在同一脚本中。我对这方面很不熟悉bash@TheHell34从命令行运行它
myscript.sh
应该是包含您自己脚本的文件名。@qole我确实收到了一个错误脚本:open failed:/home/intranet/test/test1:是一个目录Terminated@Qeole有了这一点,您的脚本需要编写,以期望得到要操作的目录作为其第一个(也是唯一一个)参数。这个错误听起来好像不是这样。同样,脚本中的
$PWD
也无法正常工作@Hell34:尝试在脚本的最开始处(shebang下方)添加
cd$1
,然后重试。第二个脚本中的
/script
错误是因为您更改了工作目录,并且您的脚本可能位于原始目录中。您需要在那里使用
$curdir/script
。我尝试过,但出现了很多错误:/home/intranet/script:line 5:/home/intranet/test/test3/script:没有这样的文件或目录您首先从哪里运行脚本?您确实在编辑的文章中使用了
$curdir
,而不是在for循环的那一行中使用了
$PWD
,对吗?@EtanReisner在主目录中是test/和我的脚本如果脚本本身有该循环,您的脚本就不能在每个目录上调用自己。您可以在每个目录上循环并调用一个只在一个目录上运行的脚本,或者编写一个在每个目录上循环并对每个循环的目录执行工作的脚本,而不是两者都执行。
    #!/bin/bash

curdir=$(pwd)
for folder in /home/intranet/test/*; do
    [ -d $folder ] && cd "$folder" && $curdir/script
done
cd $curdir

rm -f output2.txt
rm -f output3.txt
ls -td $PWD/test/*/*.pdf |head -5 >> output2.txt
ls -t test/ | sed -e 's/\.[^.]*$//' | head -5 >> output3.txt
output2=output2.txt
output3=output3.txt


download_one=$(awk 'FNR==1' $output2)
download_two=$(awk 'FNR==2' $output2)
download_three=$(awk 'FNR==3' $output2)
download_four=$(awk 'FNR==4' $output2)
download_five=$(awk 'FNR==5' $output2)

download_one_title=$(awk 'FNR==1' $output3)
download_two_title=$(awk 'FNR==2' $output3)
download_three_title=$(awk 'FNR==3' $output3)
download_four_title=$(awk 'FNR==4' $output3)
download_five_title=$(awk 'FNR==5' $output3)

rm -f output2.txt
rm -f output3.txt

Title=lol
Title2=$Title

echo $Title,$Title2,$download_one_title,$download_one,$download_two_title,$download_two,$download_three_title,$download_three,$download_four_title,$download_four,$download_five_title,$download_five >> test.csv
find /path/to/Files -type d -exec myscript.sh {} \;