파일 이름의 일부 찾기

파일 이름의 일부 찾기

내 작업을 도와주세요:

각각 6개의 파일이 포함된 세 개의 하위 폴더가 있는 폴더가 있습니다. 각 하위 폴더에는 이름에 :nopm이 포함된 두 개의 파일이 있습니다.

모든 폴더와 해당 하위 폴더를 확인하려면 셸 스크립트를 만들어야 합니다. 이름에 :nopm이 포함된 파일 이름이 있으면 이름에서 이(:nopm)를 제거해야 합니다. :nopmremoved에 표시된 것처럼 동일한 이름을 가진 다른 파일이 존재하는 경우 해당 파일을 제거해야 하며 각 상호 작용은 log.txt라는 파일에 기록되어야 합니다.

예를 들어:

나는 디렉터리를 가지고 있습니다: example_September

이 디렉터리에는 세 개의 하위 디렉터리가 있습니다.

fruit/
car/
vegetable/

이 세 디렉터리에는 각각 6개의 파일이 있습니다.

fruit      : apple pear     banana  melon   grape :nopmlime
car        : fiat  mercedes ferrari audi   suzuki :nopmaudi
vegetables : bean  broccoli cabbage corn   carrot :nopmgarlic

In the directory fruit the script should rename :nopmlime to lime
In the directory car the script should delete :nopmaudi

모든 이름 변경 및 삭제는 .txt 파일에 기록되어야 합니다. 예:

I remove the file(s)
I rename the file(s)

이것이 내가 임무를 완수하는 방법이다. 이 문제를 해결하는 데 도움을 주실 수 있나요?

for if find /data/irm/Example_September -name :nopm:
do mv filename1 filename2 
echo I rename the file. 
elif 
rm file 
echo I remove the file. 
fi >> /data/irm/Example_September/log.txt \;

답변1

스크립트 주석의 지침:

 # assign log file name into variable
 log_file_name=script.log
 # iterate over all files in this folder an its subfolders
 for fname in $(find . -type f) 
 do
      # check if current file name contains ":nopm" substring
      there_is_match=$(echo $(basename $fname) | grep ':nopm' | wc -l)
      # if yes value "1" will be assigned into there_is_match variable
      if [ $there_is_match -eq 1  ]  ; then
           # cut off ":nopm" substring - I use perl instead of sed because I find its regex nicer then sed's
           newname=$(echo $fname | perl -p -e 's/:nopm//g')
           # check if file without substring already exists
           if [ -e $newname ] ; then
                # if yes delete it and log it
                rm -f $newname
                echo "Deleted file $newname" >> $log_file_name
           fi
           # rename file and log it
           mv $fname $newname
           echo "Renamed file $fname to $newname" >> $log_file_name
      fi
 done

[ ]괄호는 testbash 명령의 단축키 라는 점을 기억하세요 . 숫자, 문자열을 비교하고 파일 및 디렉터리의 특정 조건을 확인할 수 있습니다.

관련 정보