簡體   English   中英

BASH遍歷文件夾和文件

[英]BASH loop through folders and files

我在通過目錄列出時遇到問題。 我想制作一個腳本,該腳本將遍歷目錄中的目錄和文件,以便將它們移至其他位置。

我的問題是我需要對文件夾中的所有文件進行排序。 大約有2000個目錄,我需要遍歷它們,然后遍歷這些目錄中的所有文件,並按擴展名對它們進行排序,該目錄將被創建(或文件將被移動),名稱將是該特定擴展名

有人可以幫忙嗎?

#!/bin/bash

tar_fol="$HOME/Desktop/try/"
to_fol="$HOME/Desktop/SortedFiles/"

for DIRE in "$(ls -d  $tar_fol"*")"
do

  echo "Checking dir : $DIRE"

  for FIL in "$(ls -p $tar_fol$DIRE)"
  do
    echo "Checking file : $FIL"

    if [ "$(find ~/Desktop/ -type d -name ${FIL##*.})" != "" ]
      then
          mv -f $tar_fol$FIL $to_fol${FIL##*.}
      else
        mkdir $to_fol${FIL##*.}
        mv $tar_fol$FIL $to_fol${FIL##*.}
      fi

  done
done

您引用的通配符,所以你正在尋找的文件名稱以字符字面結束*

無論如何, 您不應使用ls來驅動循環 ,並且,也應避免對私有變量使用大寫字母。

#!/bin/bash

tar_fol="$HOME/Desktop/try/"
to_fol="$HOME/Desktop/SortedFiles/"

for dire in "$tar_fol"/*/.
do
  echo "Checking dir: '$dire'"
  for fil in "$dire"/*
  do
    echo "Checking file: '$fil'"
    find ~/Desktop/ -type d -name "${fil##*.}" -exec sh -c 'mkdir -p "$0";
        mv "$@" "$0"' "$to_fol" "$fil" {} \+
  done
done

我不確定我是否完全了解最內層的循環應該完成什么,所以在那里有些猜測。 一般的想法是將目標目錄傳遞給$0 (晦澀的hack,但這很普遍),然后將找到的文件傳遞給-exec腳本。

您可以使用ls命令

cd $HOME/Desktop/try/
ls -laRX

要么

ls -laRX $HOME/Desktop/try/

   -l     use a long listing format
   -a, --all do not ignore entries starting with .
   -R, --recursive
          list subdirectories recursively
   -X     sort alphabetically by entry extension

請參閱man ls以獲取更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM