2017-09-25 141 views
-1

我有多个文件夹的多个文件夹。我需要使用相同的名称重命名这些文件,例如文件以“_partN”前缀存储的文件夹。在单个linux命令的os脚本中,用一些条件重命名多个文件夹中的所有文件。

作为例子,

我有一个命名为 “new_folder_for_upload” 的有2个文件夹。我需要将名称转换这2个文件的一样,

new_folder_for_upload_part1 new_folder_for_upload_part2

我有这么多的文件夹等,其上面有多个文件。我需要按照上面所述转换所有文件名。

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

+0

什么是文件的原始名字? 'part1'和'part2',有没有机会,还是你要枚举它们? – DevSolar

+0

你是否需要子文件夹中的重命名文件,或所有顶层目录? – DevSolar

+0

样品一样的文件: FineHowardMD_1490040273_tab17.pdf HowardFineMD_1463582881_tab17.pdf 我需要的父目录名和“_partN”更改文件名 例子: new_folder_for_upload_part1.pdf new_folder_for_upload_part2.pdf 最后完成后,这工作,我需要将所有目录中的所有文件存储到顶层目录中。 –

回答

1

假设bash shell,并假定您想要为每个子目录重新启动文件编号,并将所有文件移动到顶层目录(留下空子目录)。格式化为脚本以方便您阅读:

find . -type f -print0 | while IFS= read -r -d '' file 
do 
    myfile=$(echo $file | sed "[email protected]/@@") 
    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 "[email protected]/@@"); 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 
+0

谢谢DevSolar, 您提供的脚本为我工作。 谢谢你的帮助。 –