Bash 重命名文件以附加文件夹名称
Bash to rename files to append folder name
在文件夹和子文件夹中,我有一堆按日期命名的图像。我正在尝试编写一个脚本来查看 folder/subfolders 并重命名所有 jpg 文件以添加文件夹名称。
示例:
/Desktop/Trip 1/200512 1.jpg
/Desktop/Trip 1/200512 2.jpg
会变成:
/Desktop/Trip 1/行程 1 200512 1.jpg
/Desktop/Trip 1/行程 1 200512 2.jpg
我试着调整这个脚本,但我不知道如何让它添加新的部分。我也不知道如何让它在子文件夹上工作。
#!/bin/bash
# Ignore case, i.e. process *.JPG and *.jpg
shopt -s nocaseglob
shopt -s nullglob
cd ~/Desktop/t/
# Get last part of directory name
here=$(pwd)
dir=${here/*\//}
i=1
for image in *.JPG
do
echo mv "$image" "${dir}${name}.jpg"
((i++))
done
在您的 for 循环中尝试以下操作。请注意,'' 用于脚本可以处理文件名中的空格。
for image in "$search_dir"*.JPG
do
echo mv "'$image'" "'${dir} ${image}'"
done
使用 find
和 -iname
选项进行不区分大小写的匹配和循环图像的小脚本:
find /Desktop -iname '*.jpg' -exec sh -c '
for img; do
parentdir=${img%/*} # leave the parent dir (remove the last `/` and filename)
dirname=${parentdir##*/} # leave the parent directory name (remove all parent paths `*/`)
echo mv -i "$img" "$parentdir/$dirname ${img##*/}"
done
' sh {} +
这会提取每个图像路径的父路径(如 dirname
命令)和目录名称(如 basename
),并在图像之前使用父目录名称构造一个新的输出文件名文件名。
如果输出符合预期,请删除 echo
。
在文件夹和子文件夹中,我有一堆按日期命名的图像。我正在尝试编写一个脚本来查看 folder/subfolders 并重命名所有 jpg 文件以添加文件夹名称。
示例:
/Desktop/Trip 1/200512 1.jpg
/Desktop/Trip 1/200512 2.jpg
会变成:
/Desktop/Trip 1/行程 1 200512 1.jpg
/Desktop/Trip 1/行程 1 200512 2.jpg
我试着调整这个脚本,但我不知道如何让它添加新的部分。我也不知道如何让它在子文件夹上工作。
#!/bin/bash
# Ignore case, i.e. process *.JPG and *.jpg
shopt -s nocaseglob
shopt -s nullglob
cd ~/Desktop/t/
# Get last part of directory name
here=$(pwd)
dir=${here/*\//}
i=1
for image in *.JPG
do
echo mv "$image" "${dir}${name}.jpg"
((i++))
done
在您的 for 循环中尝试以下操作。请注意,'' 用于脚本可以处理文件名中的空格。
for image in "$search_dir"*.JPG
do
echo mv "'$image'" "'${dir} ${image}'"
done
使用 find
和 -iname
选项进行不区分大小写的匹配和循环图像的小脚本:
find /Desktop -iname '*.jpg' -exec sh -c '
for img; do
parentdir=${img%/*} # leave the parent dir (remove the last `/` and filename)
dirname=${parentdir##*/} # leave the parent directory name (remove all parent paths `*/`)
echo mv -i "$img" "$parentdir/$dirname ${img##*/}"
done
' sh {} +
这会提取每个图像路径的父路径(如 dirname
命令)和目录名称(如 basename
),并在图像之前使用父目录名称构造一个新的输出文件名文件名。
如果输出符合预期,请删除 echo
。