添加目录名称作为文件扩展名

时间:2017-10-02 11:55:34

标签: bash find file-rename

让多个目录包含类似的文件名。我想重命名文件并附加目录名作为filename的扩展名。这是一个例子:

dir1
    file1
    file2
    file3

dir2 
    file1
    file2
    file3

我目前正在做的是在每个目录中运行以下内容以批量重命名。

$> cd dir1
$> for f in *; do mv "$f" "$f.dir1"; done
$> ls 
$> file1.dir1    file2.dir1    file3.dir1  
$> cd ../dir2
$> for f in *; do mv "$f" "$f.dir2"; done
$> ls 
$> file1.dir2    file2.dir2    file3.dir2

但是这变得多余了,我想知道是否有一种方法可以自动执行,并且同时从父目录到两者都执行dir1和dir2。可以找到一个有点相关的问题here;但是我可能需要一段时间来理解并将其移植到我的平台上,因为我几乎不会编写ms窗口脚本。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以在父目录中使用它:

find -maxdepth 1 -type d -name 'dir*' -exec bash -c \
'for file in "${1}"/* ; do
     echo -v "${file}" "${file}"."$(basename "${1}")"
 done' -- {} \;

echo替换为mv,如果它适合您。

答案 1 :(得分:1)

您可以像这样修改脚本:

for d in *; do
if [ -d $d ] ; then
    cd $d; 
    for f in *; do  
        mv "$f" "$f.$d"; 
    done 
    cd ..; 
fi
done

从父目录中,您可以执行它。