ディレクトリに配置されたファイルをサブディレクトリに移動するスクリプトを作成しようとしています。
例:
配置されたファイルはサブディレクトリ/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
と、なぜ予想と異なる動作をするのかがわかります。詳細については、ファイル名の拡張。