我想用前缀重命名多个子文件夹中的文件(例如,将“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"; 完成