使用cp将.html文件转换为.txt。错误:cp:无法统计“ /*.html”:没有此类文件或目录

时间:2018-07-05 01:43:05

标签: linux bash

#!/bin/bash
# Make a txt copy of any html files

for value in $1/*.html
do
        if [[ $value == *.html ]]; then
            cp $value $1/$( basename -s .html $value ).txt
        fi
done

错误: cp:无法统计'/.html':没有此类文件或目录 cp:无法访问“ index.html / .txt”:不是目录

2 个答案:

答案 0 :(得分:1)

以下语句中的$1是第一个命令行参数。

$1/*.html

在您的代码中,期望包含HTML文件的父目录名。假设您的父目录为/home/user/my_html_files,那么如果将此参数作为命令行参数传递,则将考虑该目录中的所有HTML文件。

# ./convert_html_to_txt.sh /home/user/my_html_files

以上内容将在您的代码中变成/home/user/my_html_files/*.html。如果您的HTML文件位于当前目录中,则只需传递.作为命令行参数(.代表当前目录)

答案 1 :(得分:0)

首先,您需要将目录名称(具有完整路径)传递给脚本,其次,因为您仅循环遍历目录中的HTML文件,因此无需再次进行检查,而是可以将检查条件放在其副本上是否成功复制为.txt。我相信您很可能正在寻找这种解决方案。

cat script.ksh
for value in $1/*.html
do
   temp=${value%.*}
   echo cp "$value" "$1/$temp.txt"
   if [[ $? -eq 0 ]]
   then
       echo "File named $value copied successfully to "$value" "$1/$temp.txt"
   else
       echo "Please check file named $value NOT copied to "$value" "$1/$temp.txt"
   fi
done

然后以script.ksh的身份运行script.ksh "/directory_name/with_full_path"。另外,我已将echo放在cp命令之前,因此一旦您看到命令通过上述脚本正确打印后,就可以将其删除。