フォルダ名にファイル名が含まれている場合にファイルを移動する方法

フォルダ名にファイル名が含まれている場合にファイルを移動する方法

私はLinuxでシェルスクリプトを始めました。

ソースには多くのファイルがありますdirectorydirectoryフォルダにファイル名(正確に一致しない)を含める必要があるターゲットにファイルを移動する必要があります。

前任者: 私のソースディレクトリ

/var/backup/
logstash-avi-core.spec
logstash-core.spec
ftpcore.spec

マイターゲットディレクトリ

/path
/logstash-avi-core-2.2.0
/logstash-core-2.1.1
/ftpcore.spec-2.0

参照に基づいてスクリプトを作成しましたが、スクリプトは機能しません。ファイルがターゲットディレクトリにコピーされませんでした。

for path in /var/backup/${1}
do
    if [ -f "${path}" ]
    then
        filename="$(<<< "${file}" awk -F'.')"
        if [ -n "${filename}" ]
        then
            cp "${path}" "/path/${1}/"
        fi
    fi
done

事前にありがとう

コメントの説明に基づいて更新:"/path/${1}/"cp "${path}" "/path/${1}/"でターゲットディレクトリを参照しました。ソースディレクトリからファイル名を読み取り、ファイル名を含むフォルダ名を検索し、ファイルを一致するフォルダに移動する必要があります。これが私の要求です。

アップデート2 ファイル名とディレクトリ名を変更しました。

ベストアンサー1

私が正しく理解した場合は、各ファイル名の最初の文字を文字ではなく最初の文字までインポートし、ターゲットディレクトリの最初の文字まで最初の文字まで一致させることです_。各パターンは次のように仮定されます。 、次のことができます。

for file in /var/backup/*; do 
    fname=${file##*/}; 
    fname=${fname/.*/}; 
    cp -v "$file" /path/"$fname"*/; 
done

結果:

$ ls /path/*
/path/adbs_32:
adbs.spec

/path/dmsx_ty_32:
dmsx.spec

/path/fomru_ts_td-45:
fomru32.spec

/path/gend_monitor:
gend.spec

おすすめ記事