通过GREP或尴尬查找和移动文件



是否有一种方法可以用grep或尴尬和管道进行以下操作:

考虑一个父文件夹A,其中包含四个文件夹B,C,D,E。和每个文件夹中的层数未知数。我想在每个文件夹b,c,d,E的层次结构中找到.pdf文件。这可以通过查找来完成:

find . -type f -name "*.pdf"

找到文件后,我会将其移至另一个文件夹。因此,在B中找到的一个.pdf文件将移至父文件夹中的一个新创建的文件夹,依此类推。我不知道如何拿管并创建文件夹并进行移动/复制!

TempList=/tmp/ListOfParentFile.tmp
ParentFolder=A
here="$( pwd )"
cd ${ParentFolder}/..
find ${ParentFolder##*/} -print > ${TempList}
if [ $( grep -c -E -e '.pdf$' ${TempList} ) -gt 0 ]
 then
   mkdir "${ParentFolder##*/}${ParentFolder##*/}"
   echo 'set -vx' > ${TempList}.action
   sed -n '#^([^/]*)/([^/]*)$#  s##cp -fr &* 11/22#p' ${TempList} >> ${TempList}.action
   . ${TempList}.action
   rm ${TempList}*
   cd ${here}
 fi

为该概念快速而肮脏,对此添加任何安全性。在ksh/aix

中测试

解释

  • init以后使用的一些变量
    • 要检查的父文件夹(易于使用此循环)
    • 临时文件名
    • 调用文件夹(我们稍后使用CD,以便于从父级的结果(call 参考文件夹之后)使用)文件夹)
  • 转到参考文件夹的父(上)
  • 通过查找将所有文件(包括子文件夹)输入(包括子文件夹),然后将其放入临时文件
  • grep文件以查看pdf是否在内部(de内的子进程)
  • 如果有PDF
    • 使用参考文件夹的名称${ParentFolder##*/}两次创建一个文件夹(与参考相同的级别)。在上次/
    • 之前,使用Shell功能删除字符串的任何部分
    • 使用SET -VX创建一个临时 action 文件以跟踪活动(set -vx是可选的,而不是文件)
    • 在临时文件上使用sed(首先生成查找文件),基于每个行条目生成一组操作,该操作构成为Reference/Subfolder,将文件夹和内容的副本递归地递归。其他行被丢弃,因此仅处理参考文件夹中的第一个子文件夹。
    • 在当前外壳中运行临时操作文件(在这种情况下为批次)
    • 清洁临时文件
    • 回到启动文件夹
  • 这应该有效

    while read file;do
            dir="New_${file#*/}" #strip to first / and add "New_"
            dir="${dir%/*}" #strip off filename
            if [[ ! -d "$dir" ]];then #check directory exists or not
                    echo "creating directory structure $dir"
                    mkdir -p "$dir" || (echo "failed to create $dir.Aborting for this file" && continue) # make the directory and continue to next file if this fails
            fi
            echo "copying $file -> $dir/"
            cp "$file" "$dir/" || (echo "failed to copy $file.Aborting for this file" && continue) #Copy the file to newly created dir
    done< <(find . -type f -name "*.pdf") #find the files
    

    测试

    $find . -type f -name "*.pdf"
    ./A/4.pdf
    ./A/3.pdf
    ./A/1.pdf
    ./A/2.pdf
    ./C/4.pdf
    ./C/3.pdf
    ./C/1.pdf
    ./C/2.pdf
    ./B/7.pdf
    ./B/8.pdf
    ./B/6.pdf
    ./B/5.pdf
    ./D/7.pdf
    ./D/8.pdf
    ./D/6.pdf
    ./D/5.pdf
    

    $./Scipt
    creating directory structure New_A
    copying ./A/4.pdf -> New_A/
    copying ./A/3.pdf -> New_A/
    copying ./A/1.pdf -> New_A/
    copying ./A/2.pdf -> New_A/
    creating directory structure New_C
    copying ./C/4.pdf -> New_C/
    copying ./C/3.pdf -> New_C/
    copying ./C/1.pdf -> New_C/
    copying ./C/2.pdf -> New_C/
    creating directory structure New_B
    copying ./B/7.pdf -> New_B/
    copying ./B/8.pdf -> New_B/
    copying ./B/6.pdf -> New_B/
    copying ./B/5.pdf -> New_B/
    creating directory structure New_D
    copying ./D/7.pdf -> New_D/
    copying ./D/8.pdf -> New_D/
    copying ./D/6.pdf -> New_D/
    copying ./D/5.pdf -> New_D/
    

    find . -type f -name "*.pdf"
    ./A/4.pdf
    ./A/3.pdf
    ./A/1.pdf
    ./A/2.pdf
    ./C/4.pdf
    ./C/3.pdf
    ./C/1.pdf
    ./C/2.pdf
    ./New_C/4.pdf
    ./New_C/3.pdf
    ./New_C/1.pdf
    ./New_C/2.pdf
    ./New_A/4.pdf
    ./New_A/3.pdf
    ./New_A/1.pdf
    ./New_A/2.pdf
    ./B/7.pdf
    ./B/8.pdf
    ./B/6.pdf
    ./B/5.pdf
    ./New_B/7.pdf
    ./New_B/8.pdf
    ./New_B/6.pdf
    ./New_B/5.pdf
    ./New_D/7.pdf
    ./New_D/8.pdf
    ./New_D/6.pdf
    ./New_D/5.pdf
    ./D/7.pdf
    ./D/8.pdf
    ./D/6.pdf
    ./D/5.pdf
    

    相关内容

    • 没有找到相关文章

    最新更新