繁体   English   中英

bash脚本从文件名创建文件夹并将两种文件移动到其中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM