我有多个文件夹,包含多个文件。我需要重命名那些文件名相同的文件,例如文件夹中存储“_partN”前缀的文件夹。
例如,
我有一个名为“new_folder_for_upload”的文件夹,其中包含2个文件。我需要转换这两个文件的名称,如
new_folder_for_upload_part1 new_folder_for_upload_part2
我有很多像上面这样有多个文件的文件夹。我需要转换所有文件名,如上所述。
任何人都可以帮我找一个单独的linux命令或脚本来自动完成这项工作吗?
答案 0 :(得分:1)
假设bash
shell,并假设您希望为每个子目录重新启动文件编号,并将所有文件移动到顶层目录(留下空子目录)。格式化为脚本以便于阅读:
find . -type f -print0 | while IFS= read -r -d '' file
do
myfile=$(echo $file | sed "s@./@@")
mydir=$(dirname "$myfile")
if [[ $mydir != $lastdir ]]
then
NR=1
fi
lastdir=${mydir}
mv "$myfile" "$(dirname "$myfile")_part${NR}"
((NR++))
done
或者作为一行命令:
find . -type f -print0 | while IFS= read -r -d '' file; do myfile=$(echo $file | sed "s@./@@"); mydir=$(dirname "$myfile"); if [[ $mydir != $lastdir ]]; then NR=1; fi; lastdir=${mydir}; mv "$myfile" "$(dirname "$myfile")_part${NR}"; ((NR++)); done
小心。这是武装,并将对当前工作目录中或下方的每个文件进行批量重命名/移动。使用风险自负。
删除空子目录:
find . -depth -empty -type d -delete