我每年都有几个文件夹,这些文件夹中有对应于不同电台的文件。像这样:
.
├── 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
答案 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