添加目录名称作为文件扩展名
Add name of directory as file name extension
有多个包含相似文件名的目录。我想重命名文件并将目录名附加为文件名的扩展名。这是一个例子:
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 window 脚本。
感谢您的帮助。
您可以从父目录使用它:
find -maxdepth 1 -type d -name 'dir*' -exec bash -c \
'for file in ""/* ; do
echo -v "${file}" "${file}"."$(basename "")"
done' -- {} \;
如果适合您,请将 echo
替换为 mv
。
您可以这样修改脚本:
for d in *; do
if [ -d $d ] ; then
cd $d;
for f in *; do
mv "$f" "$f.$d";
done
cd ..;
fi
done
从父目录,你可以执行它。
有多个包含相似文件名的目录。我想重命名文件并将目录名附加为文件名的扩展名。这是一个例子:
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 window 脚本。
感谢您的帮助。
您可以从父目录使用它:
find -maxdepth 1 -type d -name 'dir*' -exec bash -c \
'for file in ""/* ; do
echo -v "${file}" "${file}"."$(basename "")"
done' -- {} \;
如果适合您,请将 echo
替换为 mv
。
您可以这样修改脚本:
for d in *; do
if [ -d $d ] ; then
cd $d;
for f in *; do
mv "$f" "$f.$d";
done
cd ..;
fi
done
从父目录,你可以执行它。