将文件从子目录移动到同名父文件夹

时间:2019-08-21 16:48:54

标签: macos shell

我每年都有几个文件夹,这些文件夹中有对应于不同电台的文件。像这样:

.
├── 2017.1
│   ├── AAAA.2017
│   ├── BBBB.2017
│   └── CCCC.2017
├── 2018.1
│   ├── AAAA.2018
│   ├── BBBB.2018
│   └── CCCC.2018
└── 2019.1
    ├── AAAA.2019
    ├── BBBB.2019
    └── CCCC.2019

我想要做的就是根据它们的名称将所有这些文件移动到主目录“。”中,这样​​就可以了:

├── AAAA
│   ├── AAAA.2017
│   ├── AAAA.2018
│   └── AAAA.2019
├── BBBB
│   ├── BBBB.2017
│   ├── BBBB.2018
│   └── BBBB.2019
├── CCCC
│   ├── CCCC.2017
│   ├── CCCC.2018
│   └── CCCC.2019

我尝试了一些简单的代码,在这些代码中,我创建了文件夹,并根据文件所在的位置简单地移动了文件。我想知道是否有更“优雅”或更简单的方法

mkdir AAAA BBBB CCCC
for file in 20*/AAAA*; do
        cp "$file" "/Users/admin/Desktop/test/AAAA"
done
for file in 20*/BBBB*; do
        cp "$file" "/Users/admin/Desktop/test/BBBB"
done
for file in 20*/CCCC*; do
        cp "$file" "/Users/admin/Desktop/test/CCCC"
done

1 个答案:

答案 0 :(得分:0)

我建议while循环解决方案。

SRC_DIR=/path/to/dir
DEST_DIR=/tmp

cd "${SRC_DIR}"

find . -type f \
  | while read -r FILE; do
    BASENAME=${FILE##*/}
    mkdir -p "${DEST_DIR}/${BASENAME%.*}" && cp -a $FILE "${DEST_DIR}/${BASENAME%.*}"
  done