我有一个文件夹Google Photos。这是来自Google照片外卖的。外卖的工作方式是有多个带有日期名称的文件夹
➜ ~/Google Photos => tree |head -n 20
.
├── 1979-12-31
│ ├── icon-24x24.png
│ ├── icon-24x24.png.json
│ ├── icon_local_color.png
│ ├── icon_local_color.png.json
│ ├── metadata.json
│ ├── viewer-14.png
│ ├── viewer-14.png.json
│ ├── viewer-28.png
│ └── viewer-28.png.json
├── 2001-07-24
│ ├── heic0109a.jpg
│ ├── heic0109a.jpg.json
│ └── metadata.json
├── 2003-01-06
│ ├── ASPdotNET_logo.jpg
│ ├── ASPdotNET_logo.jpg.json
│ ├── darkBlue_GRAD.jpg
│ ├── darkBlue_GRAD.jpg.json
我想将所有不以json结尾的文件移动到名为的新文件夹中./all_photos
。问题是我的文件夹中可能有两个名称相同的文件。
例如,在文件夹中,1979-12-31
我可能有一个名为的文件a.jpg
,在文件夹中,2001-07-24
我也可能有另一个名为的文件a.jpg
。我看过的解决方案是移动文件,但是如果有潜在的覆盖,则覆盖或跳过。我想更改文件名,如下所示:1979-12-31_a.jpg
和2001-07-24_a.jpg
。这将确保不存在任何具有相同名称的文件,因此不会被覆盖。
我在Linux服务器上,我想最好的方法是通过Linux find命令,但是我不确定确切的命令,因此需要帮助。
我写来解决该问题的脚本。可能不是最有效的方法,但是如果有更有效的方法,请告诉我。接受一个参数-您要为其应用脚本的文件夹名称。在上面的示例中,我将运行./script.sh Google\ Photos
。适用于2级子文件夹。
#!/bin/bash
shopt -s extglob
for x in `ls $1`
do
for y in $1/$x/!(*.json)
do
a=${y#"$1/$x/"}
mv $y "$1/$x-$a"
done
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句