ファイル名の一部を探す

ファイル名の一部を探す

私の仕事を手伝ってください:

それぞれ6つのファイルを含む3つのサブフォルダがあるフォルダがあります。各サブフォルダには、名前に:nopmを含む2つのファイルがあります。

すべてのフォルダとそのサブフォルダを確認するには、シェルスクリプトを作成する必要があります。名前に:nopmを含むファイル名が含まれている場合は、名前からこの(:nopm)を削除する必要があります。 :nopmremovedに示すように、同じ名前の別のファイルが存在する場合は、それらのファイルを削除し、各対話をlog.txtというファイルに書き込む必要があります。

たとえば、

私はディレクトリを持っています:example_September

このディレクトリには3つのサブディレクトリがあります。

fruit/
car/
vegetable/

これら3つのディレクトリにはそれぞれ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コマンドのショートカットであることを覚えておいてください。数値、文字列を比較し、ファイルとディレクトリの特定の条件を確認できます。

おすすめ記事