将具有特定名称的文件复制到相应的目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将具有特定名称的文件复制到相应的目录相关的知识,希望对你有一定的参考价值。

我在UNIX中有一个源目录,下面是文件20180401abc.txt,20180402acb.txt,20180402def.txt

在目标中有20180401,20180402之类的目录

如何将20180401abc.txt分别移动到20180401和20180402acb.txt,20180402def.txt到20180402目录。

使用下面的代码,

ls /home/source/ > filelist.txt
for line in `cat filelist.txt`
do
dir_path=`echo $line|cut -c1-8`
mkdir -p "/home/target/${dir_path}"
find /home/source/ -type f -exec cp {} /home/target/${dir_path} ;
done
#rm filelist.txt
答案

只需使用下面的脚本,它将解决您的问题: -

 ls /home/source/ > filelist.txt

 while read filename
 do
     dir_name=$(echo $line | cut -c1-8 )
     dir_path="/home/target/"$dir_name
     mkdir $dir_path
     chmod 666 $dir_path
     mv $filename $dir_path
 done < filelist.txt
 rm -rf filelist.txt
另一答案

$ touch 20180401abc.txt 20180402acb.txt 20180402def.txt
$ for F in *.txt; do 
    DIR=$(echo $F | sed -r 's/[a-z]{3}.txt$//');
    mkdir -p $DIR; 
    mv $F $DIR/$F; 
  done

$ find                                                                                                                                                                                                                                
> ./20180402                                                                                                                                                                                                                            
> ./20180402/20180402acb.txt                                                                                                                                                                                                            
> ./20180402/20180402def.txt                                                                                                                                                                                                            
> ./20180401                                                                                                                                                                                                                            
> ./20180401/20180401abc.txt 
另一答案

下面列出的代码正在运行:

for filename in `ls /home/source/`
do
dir_name=$(echo $filename | cut -c1-8)
dir_path="/home/target/${dir_name}"
mkdir -p $dir_path
cp /home/source/$filename $dir_path
done

以上是关于将具有特定名称的文件复制到相应的目录的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件递归复制到具有特定名称的所有文件夹中(首选批处理文件)

将文件名中具有特定字符串的目录中的所有文件复制到Bash中的不同目录[关闭]

复制具有特定父目录的所有文件,同时维护目录树

批处理文件以循环遍历文件夹并将文件夹和内容复制到具有相同文件夹名称的目录

如何将 .csv 文件保存到具有新文件名的目录

NANT 复制所有具有相似名称的文件