bash shell脚本:将某个文件夹内某个文件夹的特定内容从每个文件夹复制到桌面上的新文件夹

时间:2018-08-31 02:06:23

标签: bash shell unix scripting

我正在尽力描述这种情况。提前致谢。

步骤1:将图像复制到桌面上的文件夹到新文件夹  01、02、03 ...将图片重命名为thumb.jpg

步骤2: 创建一个包含原始文件夹名称的新.txt。

file=${01}
cd ~/Desktop/TEST
(while read $file; do

    find . -type f -name "*300x250.jpg" 2>/dev/null | \
      (while read s; do
      IFS='/' read -ra FOLDERS <<< "$s"
      THUM=${s%.*}
      mkdir -p ~/Desktop/$file/
      cp "$s" ~/Desktop/$file/Thumb.jpg
      file=${01+1}
    done
   )
)

示例:

测试文件夹包含

AD-123456-44 -> AD-123456-44_300x250.jpg

MT-333333-11 -> MT-333333-11_300x250.jpg

SA-222222-33 -> SA-222222-33_300x250.jpg

此结果在桌面上

01 -> AD-123456-44.txt - thumb.jpg

02 -> MT-333333-11.txt - thumb.jpg

03 -> SA-222222-33.txt - thumb.jpg

请参见以下图片:

Starting

Ending Result

1 个答案:

答案 0 :(得分:0)

我查看了您的代码,并决定重新开始。在我看来,您使它变得比需要的复杂。这是我的代码:

#!/bin/bash

sourcedir=~/SO/sourcedir
targetdir=~/Desktop/TEST

targetsubdir_counter=1

cd $sourcedir

for dir in $(find . -maxdepth 1 -type d -print | egrep -v "^\.$")
do
    cd $dir

    if [ $targetsubdir_counter -lt 10 ]
    then
        targetsubdir_name="0$targetsubdir_counter"
    else
        targetsubdir_name="$targetsubdir_counter"
    fi
    newdir="$targetdir/$targetsubdir_name"
    mkdir -p $newdir

    for file in "*300x250.jpg"
    do
        cp $file $newdir/thumb.jpg

        textfilename=$(echo $file | sed 's/\(.*\)_300x250.jpg$/\1.txt/')
        echo "$sourcedir/$dir" > $newdir/$textfilename
    done
    cd ..
    (( targetsubdir_counter = targetsubdir_counter + 1 ))
done
  • 第一个for遍历$sourcedir下的每个目录。 find确保仅处理第一级目录。 egrep -v删除当前目录(.)。
  • 目标目录是在此循环开始时创建的。
  • 目标目录的名称是根据计数器计算得出的。如果您想让0x如果x <10,那么if就是这样做的。
  • 第二个for循环浏览名称中包含“ _300x250.jpg”的文件。
  • 对于找到的每个文件,它将其复制到“ thumb.jpg”
  • ,它回显“ .txt”文件中的源目录。该文件的名称是使用sed在上一行中计算的。

请注意,我使用cp并注意mv是因为我想保持源目录完整。我建议您也这样做,并且只有对结果满意后才删除源。