如何用shell批量移动子目录下文件到当前文件夹
发布网友
发布时间:2022-04-30 19:27
我来回答
共8个回答
热心网友
时间:2022-04-18 10:23
#!/bin/bash
rp=$(pwd)
echo rootpath-----------------:${rp}
# function
moveFile(){
# get dirs
ls -F | grep "/$" > temp_dirs.txt
cat temp_dirs.txt | while read d
#for d in $(cat temp_dirs.txt);
#while read d
do
cp=$(pwd)/${d}
cd ${cp}
echo currentPath----------------------:${cp}
ls -al | grep "^-" > temp_files.txt
cat temp_files.txt | while read f
#for f in $(cat temp_files.txt);
#while read f
do
fileName="${f##* }"
echo filename--------------------:${fileName}
newFileName=${rp}/${d%*/}-${fileName}
echo newfilename---------------------:${newFileName}
fullPath=${cp}${fileName}
echo fullPath-------------------------:${fullPath}
mv ${fullPath} ${newFileName}
done
#< <(ls -al | grep "^-")
# delete temp file
test -a temp_files.txt && rm -rf temp_files.txt
#
moveFile
test -a temp_dirs.txt && rm -rf temp_dirs.txt
cd ..
done
#< <(ls -F | grep "/$")
}
# exec
echo 'start move files ...'
moveFile
rm -rf *temp_dirs.txt
rm -rf *temp_files.txt
echo 'move files end'
技术有限,此代码效率不高;在linux测试没问题,mac上没测,你可以先测一下;文件移到根目录会被重命名为它原先所在的文件夹加上短杠加上它原先的名称
热心网友
时间:2022-04-18 11:41
`把这代码放在待转入的文件夹路径下面。
from_folder=文件夹路径
from_folder= ###文件夹路径,需要手写入
current_folder=$(pwd) ###新件夹路径,与脚本在一个路径下所以不用改动
for file in $(find $from_folder)
do
[[ -d $file ]] && continue #如果不是文件,跳过
#如果是重名, 在名字前加入路径,
#如果不重名, 直接移到现有文件夹下
if [[ -e ${file##*/} ]];then
mv $file $(echo $file | sed 's/\//_/g')
else
mv $file .
fi
done
热心网友
时间:2022-04-18 13:15
需要写一个函数
#!/bin/bash
function read_dir(){
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
read_dir $1"/"$file
else
echo $1"/"$file
fi
done
}
read_dir $1 > ~/txt_27316324984592
for i in $(<~/txt_27316324984592); do mv $i $2; done
rm ~/txt_27316324984592 #中间文件,存储文件路径
将代码复制到getfile.sh,chmod 777 getfile.sh
用法:path/to/getfile.sh 你要移动的文件夹路径 目标文件见路径
热心网友
时间:2022-04-18 15:07
#!/bin/bash
#
dir=$(pwd)
echo "当前目录为$dir"
a=0
for i in `find $dir -type d`;do
if [ $i != $dir ];then
mv $i $dir
echo "移动$i 目录至$dir"
fi
done
-----------------------------------
这个可以把下一级文件夹移动到当前目录下。就是要多运行几次。还有就是同名文件无法移动。我觉得还挺实用,同名文件夹还没想好。
热心网友
时间:2022-04-18 17:15
1、主要是从文件名截取出日期,如果固定了位数
2、可以先按_分割取第二段
echo $file|awk -F\_ '{print $2}'
3、然后再取第4位后面的8位
4、例如:vi a.sh
#!/bin/sh
for file in `ls *.jpg`;do
echo $file
datedir=$(echo $file|awk -F\_ '{print $2}'|awk '{print substr($1,4,8)}')
mkdir $datedir
/bin/mv $file $datedir
done追问试了下没用啊
热心网友
时间:2022-04-18 19:39
额
热心网友
时间:2022-04-18 22:21
1、主要是从文件名截取出日期,如果固定了位数
2、可以先按_分割取第二段
echo $file|awk -F\_ '{print $2}'
3、然后再取第4位后面的8位
4、例如:vi a.sh
#!/bin/sh
for file in `ls *.jpg`;do
echo $file
datedir=$(echo $file|awk -F\_ '{print $2}'|awk '{print substr($1,4,8)}')
mkdir $datedir
/bin/mv $file $datedir
done
热心网友
时间:2022-04-19 01:19
现在没网,等有网了帮你写个EXE程序得了。