複数のディレクトリからファイルを移動する Linux スクリプト

複数のディレクトリからファイルを移動する Linux スクリプト

ディレクトリに配置されたファイルをサブディレクトリに移動するスクリプトを作成しようとしています。
例:
配置されたファイルはサブディレクトリ/home/userA/directory1に移動されます。/home/userA/directory1/directory2

usersこれをすべてに対して繰り返す必要があり、存在しない/home場合はユーザーをスキップする必要があります。directory2

これまでの私のスクリプト

#!/bin/bash

directory="/home/*/directory1"
directory2="/home/*/directory1/directory2/."

if [ $(ls -1A $directory | wc -l) -gt 0 ] ;
then
find $directory -type f -exec rsync --remove-source-files {} $directory2  \; &>/dev/null ;
fi

上記のスクリプトの問題は、すべてのファイルを の 1 つに移動することですdirectory2

答え1

一部のユーザーのホームには というディレクトリが存在しd1、その中に というサブディレクトリが存在すると想定しますd2

似たようなことをしたいのだと思います

#!/bin/bash
for i in /home/*/d1 ; do
    if [ -d "$i/d2" ]; then
     # echo  "$i/d2"
     find  "$i" -maxdepth 1 -type f -exec mv {} "$i/d2" \;
    fi
done

注記:

  • の実際の名前にd1スペースがある場合は、さらにジムを実行して、 で保護する必要があります\( と記述できますfor i in /home/*/directory\ with\ spaces; do)。
  • 以前のスクリプトを書いてみるecho $directory2 ; exitと、なぜ予想と異なる動作をするのかがわかります。詳細については、ファイル名の拡張

関連情報