在单个linux命令os脚本中重命名多个文件夹中的所有文件。

时间:2017-09-25 09:27:12

标签: linux shell unix rename file-rename

我有多个文件夹,包含多个文件。我需要重命名那些文件名相同的文件,例如文件夹中存储“_partN”前缀的文件夹。

例如,

我有一个名为“new_folder_for_upload”的文件夹,其中包含2个文件。我需要转换这两个文件的名称,如

new_folder_for_upload_part1 new_folder_for_upload_part2

我有很多像上面这样有多个文件的文件夹。我需要转换所有文件名,如上所述。

任何人都可以帮我找一个单独的linux命令或脚本来自动完成这项工作吗?

1 个答案:

答案 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