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

问题描述 投票:0回答:1

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

步骤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
   )
)

例:

TEST_FOLDER包含

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

bash shell unix scripting
1个回答
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删除当前目录(.)。
  • 目标目录是在此循环开始时创建的。
  • 目标目录的名称是从计数器计算的。因为如果x <10,你想拥有0x,这就是if所做的。
  • 第二个for循环浏览名称中包含“_300x250.jpg”的文件。
  • 对于找到的每个文件,它将其复制到“thumb.jpg”
  • 它回显“.txt”文件中的源目录。使用sed在上一行中计算该文件的名称。

请注意,我使用cp并注意mv,因为我想保持源目录不变。我建议你这样做,只有在对结果满意后才删除源。

© www.soinside.com 2019 - 2024. All rights reserved.