这可能听起来很奇怪,但对于我的 HTPC,我需要重新安排文件的存储方式,以便文件夹中的每个单独文件都需要移动到其自己的子目录(与文件同名) 。
IE - 当前目录是:
directory/
- a.file
- b.file
- c.file
我想将其更改为:
directory/
- a/
-- a.file
- b/
-- b.file
- c/
-- c.file
我不认为这非常棘手,但这很奇怪,而且我以前没有发现有人这样做过:我认为这可以通过 find 和 exec 来完成,但我是一个战斗者,不能完全理解它。
提前非常感谢您(或者只是感谢您花时间阅读本文)。
答案1
另一个解决方案:
#!/usr/bin/env bash
Dir="/tmp/directory/"
for f in "$Dir"/*;
do
SubDir="${f%.*}"
mkdir -- "$SubDir"
mv -- "${f}" "$SubDir/"
done
答案2
编写一个 shell 脚本,将文件作为参数:
#!/bin/bash
for filepath; do
parentpath="${filepath%/*}"
if [ "$parentpath" != "$filepath" ]; then # $file contains a /
file="${filepath#"$parentpath"/}"
else
file="$filepath"
parentpath=""
fi
filename="${file%.*}"
if [ -z "$parentpath" ]; then
mkdir -p "$filename" && mv "$file" "$filename"
else
mkdir -p "${parentpath}/$filename" &&
mv "$filepath" "${parentpath}/$filename"
fi
done
./script *.ext1 *.ext2 *.ext3
对于数量不太大或find ... -exec ./script {} +
数量很大的文件,您可以调用此脚本。