我绝对是脚本新手。我有一个处理某些文件的脚本,我无法弄清楚如何针对包含许多子目录和数千个文件的目录中的所有文件运行此脚本。基本上我想采用这个脚本并针对标题为2011的目录运行它并让它处理每个子文件夹中的每个文件。
#!/bin/bash
FILES=./userfiles/*
for f in $FILES
do
echo ""
echo ""
echo "Processing File $f ...."
echo ""
echo ""
make FILE_TYPE=user CSS_PATH=./log.css SCRIPT_PATH=./toggle.js SAXON_JAR=/opt/saxon/saxon9he.jar $f.html
echo ""
echo ""
echo "File $f.html Generated"
done
答案 0 :(得分:1)
以下脚本将递归到./userfiles
下的每个目录中并处理其中的所有文件,即使名称中包含空格(或其他恶意字符)的文件也是如此。
此外,您编写脚本的方式, make 将作为其最后一个参数传递,因为它显示在附加.html
的磁盘上。例如,文件./userfiles/subdir/foobar.txt
将作为./userfiles/subdir/foobar.txt.html
传递给 make 。如果这不是您想要的,请相应地调整${file}.html
。
此外,如果您希望find
仅 处理以.html
结尾的文件,那么您可以将选项-name "*.html"
附加到路径名后面的任何地方都有find
命令。
#!/bin/bash
topLevelDir="./userfiles"
while IFS= read -r -d $'\0' file; do
echo
echo
echo "Processing File $file ...."
echo
echo
make FILE_TYPE=user CSS_PATH=./log.css SCRIPT_PATH=./toggle.js SAXON_JAR=/opt/saxon/saxon9he.jar "${file}".html
echo
echo
echo "File $file.html Generated"
done < <(find "$topLevelDir" -type f -print0)
答案 1 :(得分:0)
尝试使用find
命令获取所有文件和目录的列表
答案 2 :(得分:0)
不确定您的脚本是做什么的,但是为了从当前文件夹开始的树中的每个文件运行它,您可以使用:
find . -exec yourscript.sh {} \;
答案 3 :(得分:0)
由于您的脚本已经了解了一个级别的文件扩展,因此可能在包含./userfiles
目录的每个目录上运行它会很快且简单...
$ find . -type d -a -name userfiles -a -exec sh /whatever/myscript {}/.. \;
答案 4 :(得分:0)
这是一个执行你所要求的功能,你传递一个文件夹,看到底部func_process_folder_set&#34; /文件夹&#34;的调用。
# --- -------------------------------- --- #
# FUNC: Process a folder of files
# --- -------------------------------- --- #
func_process_folder_set(){
FOLDER="${1}"
while read -rd $'\0' file; do
fileext=${file##*.} # -- get the .ext of file
case ${fileext,,} # -- make ext lowercase for checking in case statement
echo "FILE: $file" # -- print the file (always use " " to handle file spaces)
done < <(find ${FOLDER} -type f -maxdepth 20 -name '*.*' -print0)
}
# -- call the function above with this:
func_process_folder_set "/some/folder"