[英]bash script to create folder from filename and move two kinds of file into it
我有一组横幅,包括 .jpg 和 .psd。 我需要为他们创建文件夹并将它们移动到其中。
example:
Banner-A.jpg
Banner-A.psd
Banner-B.jpg
Banner-B.psd
Banner-C.jpg
Banner-C.psd
Create folder and move them:
Banner-A/Banner-A.jpg Banner-A.psd
Banner-B/Banner-B.jpg Banner-B.psd
Banner-C/Banner-C.jpg Banner-C.psd
我设法在这里找到了一个适用于第一部分的脚本,但我也无法让 .psd 移动。
for f in "$@"; do
cd "$f"
for file in *.jpg; do
folder=$(basename "$file" ".jpg")
mkdir -p "$folder" && mv "$file" "$folder"
done
done
更改您的mv
命令以使用*
通配符,如下所示:
for file in *.jpg; do
folder=$(basename "$file" ".jpg")
mkdir -p "${folder}" && mv "${folder}".* "${folder}"
done
确保.*
在引号之外,它应该可以工作。
示例脚本:
#!/bin/bash
set -uo pipefail
doWork() {
dir="${1}"
cd "${dir}" || return
for file in *.jpg; do
folder=$(basename "$file" ".jpg")
mkdir -p "${folder}" && mv "${folder}".* "${folder}"
done
}
doWork "$@"
示例数据目录:(在执行脚本之前)
$ ls data
Banner-A.jpg Banner-A.psd Banner-B.jpg Banner-B.psd Banner-C.jpg Banner-C.psd
运行脚本:
./script.sh ./data
脚本后的数据目录:
$ ls data
Banner-A Banner-B Banner-C
数据目录子目录:
$ ls data/Banner-*
data/Banner-A:
Banner-A.jpg Banner-A.psd
data/Banner-B:
Banner-B.jpg Banner-B.psd
data/Banner-C:
Banner-C.jpg Banner-C.psd
我可能只是用
for f in Banner*.jpg Banner*.psd; do
mkdir -p "${f%.???}/"
mv "$f" "${f%.???}/"
done
在*.jpg
已经创建文件夹后, *.psg
为*.psg
文件执行mkdir -p
,但涵盖了可能有一个文件但没有另一个文件的奇怪情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.