LINUX 使用前缀重命名子文件夹中的文件的代码

LINUX 使用前缀重命名子文件夹中的文件的代码

我想用前缀重命名多个子文件夹中的文件(例如,将“file.tif”重命名为“prefix_file.tif”),而不必位于子文件夹中。

代码:for f in /path/to/*; do echo mv "$f" "PRE_$f"; done

给你这个: mv /path/to/file1 PRE_/path/to/file1

相反我想要的是这个:mv /path/to/file1 /path/to/PRE_file1

有任何想法吗?

答案1

prefix="prefix_"
for file in /path/to/*; do
    dir=$(dirname "$file")
    base=$(basename "$file")
    dest="$dir"/"$prefix""$base"
    echo mv "$file" "$dest"  # remove "echo" after testing
done

答案2

使用Bash:

for f in /path/to/*
do 
    dir="${f%/*}"
    echo mv "$f" "$dir/PRE_${f/$a\/}"
done

所有内容都在一行上:

for f in /path/to/*; do dir="${f%/*}"; echo mv "$f" "$dir/PRE_${f/$a\/}"; done

答案3

Mike 的第一个命令成功了。我在这里用一行写出来:

对于 /path/to/* 中的 f; 执行 dir=$(dirname "$f"); base=$(basename "$f"); dest="$dir"/"$prefix""$base"; echo mv "$f" "$dest"; 完成

Dennis 的第二个命令似乎输出错误:path/prefix_path/filename 而不是 path/prefix_filename

这可能与我的文件夹名称中有空格有关吗?

哎呀,这里是正确的一行:

prefix="prefix_"; for f in /path/to/*; do dir=$(dirname "$f"); base=$(basename "$f"); dest="$dir"/"$prefix""$base"; echo mv "$f" "$dest"; 完成

相关内容