您可以使用find 来搜索所有*.jpg 文件和一个简单的helper 脚本,该脚本由-exec 选项调用到find 来创建jpg目录并将所有.jpg 文件移动到新目录中。
帮助脚本将简单地利用readlink -f 获取绝对文件名,然后使用快速参数扩展 从绝对文件名中修剪最后一个/... 组件以获得完整路径。然后只需在路径末尾创建jpg 目录并将文件移动到新目录即可。
您的帮助脚本(我称之为helper.sh)可能是:
#!/bin/sh
test -z "$1" && exit ## validate 1 argument given or exit
full=$(readlink -f "$1") ## get full filename
dir="${full%/*}" ## get full path
test "${full##*.}" = 'jpg' || exit ## test extension is jpg or exit
test -z "$dir" && dir="/" ## check if file was in / (root)
test -d "$dir/jpg" || mkdir -p "$dir/jpg" ## check/create jpg dir at end of path
mv "$full" "$dir/jpg" ## move file into new jpg dir
(注意:在创建帮助脚本后,请确保使用chmod +x helper.sh 使其可执行)
原始项目目录树
$ tree Projects/
Projects/
├── Project_001
│ └── Image_001.jpg
├── Project_002
│ ├── Image_002.jpg
│ └── Image_003.jpg
└── Project_003
您在Projects 目录上运行的find 命令会为每个文件调用帮助程序脚本:
$ find Projects/ -type f -name "*jpg" -exec ./helper.sh '{}' \;
结果项目目录树
$ tree Projects/
Projects/
├── Project_001
│ └── jpg
│ └── Image_001.jpg
├── Project_002
│ └── jpg
│ ├── Image_002.jpg
│ └── Image_003.jpg
└── Project_003
如果您还有其他问题,请告诉我。
保存已存在于 jpg 目录中的文件
根据您的附加评论,为了在您的项目下的 jpg 目录中保留 .jpg 文件,您需要做的就是添加一项额外的检查。如果路径的最后一个组件已经是jpg,则退出助手,例如
test "${dir##*/}" = 'jpg' && exit ## if already in jpg dir, exit
在helper.sh的上下文中显示:
test -z "$1" && exit ## validate 1 argument given or exit
full=$(readlink -f "$1") ## get full filename
dir="${full%/*}" ## get full path (trim last /*)
test "${dir##*/}" = 'jpg' && exit ## if already in jpg dir, exit
test "${full##*.}" = 'jpg' || exit ## test extension is jpg or exit
...
原始项目目录树(带现有 jpg)
$ tree Projects/
Projects/
├── Project_001
│ ├── Image_001.jpg
│ └── jpg
│ └── Image_000.jpg
├── Project_002
│ ├── Image_002.jpg
│ ├── Image_003.jpg
│ └── jpg
│ ├── Image_000.jpg
│ └── Image_001.jpg
└── Project_003
结果项目目录树
$ tree Projects/
Projects/
├── Project_001
│ └── jpg
│ ├── Image_000.jpg
│ └── Image_001.jpg
├── Project_002
│ └── jpg
│ ├── Image_000.jpg
│ ├── Image_001.jpg
│ ├── Image_002.jpg
│ └── Image_003.jpg
└── Project_003