在我的脚本中,我正在获取一个文本文件并分成几个部分。在进行任何拆分之前,我正在重新格式化文本文件的名称。问题:创建文件夹/目录并将其命名为格式化文件名。这是放置段的位置。但是,当文本文件中包含空格时,脚本会中断。但这就是我试图首先重新格式化名称然后进行其余操作的原因。我怎么能按顺序这样做?
执行脚本:text_split.sh -s "my File .txt" -c 2
# remove whitespace and format file name
FILE_PATH="/archive/"
find $FILE_PATH -type f -exec bash -c 'mv "$1" "$(echo "$1" \
| sed -re '\''s/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/'\'' -e '\''s/ /_/g'\'' -e '\''s/_-/-/g'\'')"' - {} \;
sleep 1
# arg1: path to input file / source
# create directory
function fallback_out_file_format() {
__FILE_NAME=`rev <<< "$1" | cut -d"." -f2- | rev`
__FILE_EXT=`rev <<< "$1" | cut -d"." -f1 | rev`
mkdir -p $FILE_PATH${__FILE_NAME};
__OUT_FILE_FORMAT="$FILE_PATH${__FILE_NAME}"/"${__FILE_NAME}-part-%03d.${__FILE_EXT}"
echo $__OUT_FILE_FORMAT
exit 1
}
# Set variables and default values
OUT_FILE_FORMAT=''
# Grab input arguments
while getopts “s:c” OPTION
do
case $OPTION in
s) SOURCE=$(echo "$OPTARG" | sed 's/ /\\ /g' ) ;;
c) CHUNK_LEN="$OPTARG" ;;
?) usage
exit 1
;;
esac
done
if [ -z "$OUT_FILE_FORMAT" ] ; then
OUT_FILE_FORMAT=$(fallback_out_file_format $SOURCE)
fi
答案 0 :(得分:0)
您可以使用tr -d ' '
修剪输入字符串中的空格。
然后,您可以使用以下内容将其加入FILE_PATH
变量:
FILE_NAME=$(echo $1 | tr -d ' ')
FILE_PATH="/archive/"
FILE_PATH=$FILE_PATH$FILE_NAME
答案 1 :(得分:0)
您的脚本采用带-s指定的文件名参数,然后通过重命名其包含的文件来修改硬编码目录,然后使用初始文件名生成输出目录和文件名。听起来好像应该调整工作流程。例如,不要尝试更正/ archive /中的所有错误文件名,只需修复使用-s指定的文件的名称。
要获取文件名和扩展名,请使用bash的字符串操作功能,如this question所示:
filename="${fullfile##*/}"
extension="${filename##*.}"
name="${filename%.*}"
答案 2 :(得分:0)
您可以使用反斜杠\
来逃避空间
现在,用户可能并不总是提供反斜杠,因此脚本可以使用sed
将所有(空格)转换为
\
sed 's/ /\ /g'
您可以获取新目录名称
dir_name=`echo $1 | sed 's/ /\ /g'