将文件夹名称复制到其文件的名称中

将文件夹名称复制到其文件的名称中

我有一个名为“墨西哥”的文件夹,里面有 .jpg 格式的图片。如何将文件夹名称复制到文件名中。

这是当前的:

Mexico(folder)         
1.jpg
2.jpg

这就是我想要的:

Mexico(folder)         
 Mexico1.jpg
 Mexico2.jpg

然后剪下图片文件并将它们发送到另一个名为“图片”的文件夹中,那里有我其他的图片。然后删除原始的墨西哥文件夹。这两个文件夹没有关系。假设它们都在桌面上,彼此独立。

最终结果:

Pictures          
 -Mexico1.jpg
 -Mexico2.jpg
 -other.jpg
 -... .jpg

在网上找不到好的答案。我比较喜欢简单的解决方案,我是新手。而且它应该是自动化的,这样就可以连续用于多个文件夹。所有文件夹都有不同的名称,例如“墨西哥”、“西班牙”...文件夹和图片太多,无法手动更改名称。

提前致谢

答案1

如果两个目录都位于同一个父目录中,Desktop例如,您可以使用以下命令:

cd ~/Desktop
rename -n 's,^(.*)/,Pictures/$1-,' Mexico/*.jpg Spain/*.jpg

请注意,这实际上不会执行任何移动或重命名操作,它只会向您显示将要执行的操作。在-n验证输出中的所有内容都正常后,运行命令以执行实际重命名。

然后你可以使用以下命令删除这些空目录:

rmdir Mexico Spain

甚至只是:

rmdir */

这将无法删除非空目录,但可以删除空目录。

答案2

在 Bash shell 循环中mv

for f in */*; do
  if [ "${f%/*}" != "Pictures" ]; then
    echo mv -nv -- "$f" "Pictures/${f%/*}${f#*/}"
    fi
  done

然后您需要cd ~/Desktop运行循环并最后使用rmdir */...删除空目录,或者一次完成所有操作:

{
cd ~/Desktop
for f in */*; do
  if [ "${f%/*}" != "Pictures" ]; then
    echo mv -nv -- "$f" "Pictures/${f%/*}${f#*/}"
    fi
  done
rmdir */
}

注意echo是为试运行而添加的,因此当对输出满意时将其删除,以进行实际重命名。

示范:

$ tree ~/Desktop
/home/ubuntu/Desktop
├── Mexico
│   ├── 1.jpg
│   └── 2.jpg
├── Pictures
│   ├── 1.jpg
│   └── 2.jpg
└── Spain
    ├── 1.jpg
    └── 2.jpg
$
$
$ {
cd ~/Desktop
for f in */*; do
  if [ "${f%/*}" != "Pictures" ]; then
    mv -nv -- "$f" "Pictures/${f%/*}${f#*/}"
    fi
  done
rmdir */
}
renamed 'Mexico/1.jpg' -> 'Pictures/Mexico1.jpg'
renamed 'Mexico/2.jpg' -> 'Pictures/Mexico2.jpg'
renamed 'Spain/1.jpg' -> 'Pictures/Spain1.jpg'
renamed 'Spain/2.jpg' -> 'Pictures/Spain2.jpg'
rmdir: failed to remove 'Pictures/': Directory not empty
$
$
$ tree ~/Desktop
/home/ubuntu/Desktop
└── Pictures
    ├── 1.jpg
    ├── 2.jpg
    ├── Mexico1.jpg
    ├── Mexico2.jpg
    ├── Spain1.jpg
    └── Spain2.jpg

注意.除非您明确设置 Bash 的dotglob选项,否则这将不适用于以点开头的隐藏文件/目录。

答案3

下面的脚本应该可以工作。

for file in $(find "./$1" -type f);
do
    cp $file "./Pictures/$1$(basename $file)"
    done

它遍历 $1(参数 1)目录中的文件,然后副本将其复制到带有 $1 前缀的 Pictures 目录中。它复制而不是移动,以使错误可逆。参数 1 是姓名,不是路径,是照片目录和前缀。

按照编辑@Dan 建议使用引号,如果您更多地参与脚本,您可能需要记住这一点。

相关内容