几天来,我一直在努力解决问题。 我有一个目录结构,如:
Dir/Documents/PersonA/
Dir/Documents/PersonB/
Dir/Pictures/PersonA/
Dir/Pictures/PersonC/
Dir/Mails/PersonA/
Dir/Mails/PersonB/
我想将所有内容递归地更改为:
Dir/PersonA/Documents/
Dir/PersonA/Pictures/
Dir/PersonA/Mails/
Dir/PersonB/Documents
Dir/PersonB/Mails
Dir/PersonC/Pictures
我尝试了一些脚本,但因为一些dirs包含空格而被卡住了,因为我不够好......
答案 0 :(得分:0)
在shell(bash,sh,zsh等)中,可以使用for
循环:
for person in $(cd Dir/Documents/ ; ls); do
for d in Documents Pictures Mails; do
mv "Dir/$d/${person}" "Dir/${person}/$d"
done
done
编辑:在mv
参数
EDIT2:for
不足以处理空格。 (+添加mkdir)
/bin/ls -d Dir/*/* | while read e; do
persondir=$(echo $e | awk -F/ '{print $1"/"$3}')
subfolder=$(echo $e | awk -F/ '{print $1"/"$3"/"$2}')
mkdir -p "${persondir}"
mv "$e" "$subfolder"
done