Linux 基于文本文件名创建目录名

Linux 基于文本文件名创建目录名,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我正在运行一个名为filename\u to_dir.sh的脚本,它在while循环中接受一个参数-s。该参数是一个.txt文件名。我使用while循环对它在某个目录中找到的每个文件执行脚本,然后用格式化的文件名创建子目录。但是在创建任何目录之前,文件名都会被格式化,并去掉空白和其他一些东西,以避免在将其馈送到filename\u to_dir.sh时出错。唯一的问题是目录被格式化,但文本文件名保持不变。如何基于格式化文件名创建目录 目前的结果: |-- text_files | |-- t

我正在运行一个名为
filename\u to_dir.sh
的脚本,它在while循环中接受一个参数
-s
。该参数是一个
.txt
文件名。我使用while循环对它在某个目录中找到的每个文件执行脚本,然后用格式化的文件名创建子目录。但是在创建任何目录之前,文件名都会被格式化,并去掉空白和其他一些东西,以避免在将其馈送到
filename\u to_dir.sh
时出错。唯一的问题是目录被格式化,但文本文件名保持不变。如何基于格式化文件名创建目录

目前的结果:

|-- text_files
|   |-- this_is_new-1
|   |-- test_11-today
|   |-- hi_hi-Bye
|   |-- this is new - 1.txt
|   |-- test 11 - today.txt
|   |-- hi HI - Bye.txt
预期结果:

|-- text_files
|   |-- this_is_new-1
|   |-- test_11-today
|   |-- hi_hi-Bye
|   |-- this_is_new-1.txt
|   |-- test_11-today.txt
|   |-- hi_hi-Bye.txt
我试过两种方法:

while read -r file; do
    new_file=$(echo "$file" | sed -re 's/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/' -e 's/ /_/g' -e 's/_-/-/g')
    if [ "$file" != "$new_file" ]; then
        echo mv "$file" "$new_file"
        file_split.sh -s $file
    fi
done < <(find $FILE_PATH -type f -name '*.txt')
读取-r文件时
;做
新建文件=$(回显“$file”| sed-re's/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/'-E's//\u/g'-E's/-/-/g'))
如果[“$file”!=“$new_file”];然后
echo mv“$file”“新文件”
file_split.sh-s$文件
fi

完成<我认为你应该将
echo mv“$file”$new\u file”
更改为
mv“$file”$new\u file”

为什么要在循环中运行sudo?@JohnZwinck纠正了这一点。
//Using find but i loose a way to check if file has been renamed already
while read -r file; do
    file_split.sh -s $file 
done < <(find $FILE_PATH -type f -exec bash -c 'echo "mv \"$1\" \"$(echo "$1" | sed -re '\''s/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/'\'' -e '\''s/ /_/g'\'' -e '\''s/_-/-/g'\'')\""' - {} \;)