为所有没有特定扩展名的文件添加后缀并保留文件扩展名

kst*_*pt3 5 xargs filenames rename

我有了一个目录中.zip的文件和其他文件(所有文件一个扩展名),我想添加一个后缀的所有文件没有.zip扩展。我能够挑选一个后缀并将其放入一个变量中$suffix,因此我尝试了以下代码:

ls -I "*.zip"| xargs -I {} mv {} {}_"$suffix"

这列出了所有没有.zip和接近的文件(但错误)。它错误地产生了以下结果file.csv

file.csv_suffix
Run Code Online (Sandbox Code Playgroud)

我想要file_suffix.csv- 如何编辑我的代码以保留文件的扩展名?

Rom*_*est 3

查找+ bash方法:

export suffix="test"
Run Code Online (Sandbox Code Playgroud)

a ) 查找-exec操作:

find your_folder -type f ! -name "*.zip" -exec bash -c 'f=$1; if [[ "$f" =~ .*\.[^.]*$ ]]; then ext=".${f##*\.}"; else ext=""; fi; mv "$f" "${f%.*}_$suffix$ext"' x {} \;


b ) 或者使用 bashwhile循环:

find your_folder/ -type f ! -name "*.zip" -print0 | while read -d $'\0' f; do 
    if [[ "$f" =~ .*\.[^.]*$ ]]; then
        ext=".${f##*\.}"
    else 
        ext=""
    fi
    mv "$f" "${f%.*}_$suffix$ext"
done
Run Code Online (Sandbox Code Playgroud)