在我的脚本中,我将获取一个文本文件并将其拆分为多个部分。在进行任何拆分之前,我将重新格式化文本文件的名称。问题:创建一个文件夹/目录并命名其格式的文件名。这是放置细分的位置。但是,当文本文件中包含空格时,脚本会中断。但是,这就是我尝试首先重新命名名称,然后再进行其余操作的原因。我该怎么做呢?
执行脚本: 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
您的脚本采用以-s指定的文件名参数,然后通过重命名包含的文件来修改硬编码目录,然后使用初始文件名生成输出目录和文件名。听起来好像应该对工作流程进行调整。例如,不要试图更正/ archive /中所有错误的文件名,而只需修复用-s指定的文件名即可。
要获取文件名和扩展名,请使用bash的字符串操作功能,如以下问题所示:
filename="${fullfile##*/}"
extension="${filename##*.}"
name="${filename%.*}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句