フォルダとサブフォルダで3桁の数字で終わるすべてのファイルを見つけて、ディレクトリ構造を維持しながら新しい場所に移動するにはどうすればよいですか?
または、名前が3桁の数字で終わらないすべてのファイルをどのように見つけることができますか?
ベストアンサー1
@don_crisstiがリンクした答えに基づいたよりクリーンなソリューションです。 (Rsyncフィルタ:1つのパターンのみをコピー)
rsync -av --remove-source-files --include='*[0-9][0-9][0-9]' --include='*/' --exclude '*' /tmp/oldstruct/ /tmp/newstruct/
そして否定:
rsync -av --remove-source-files --exclude='*[0-9][0-9][0-9]' /tmp/oldstruct /tmp/newstruct/
元の答え:
これはトリックを行う必要があります。入力した構造体で3桁で終わるすべてのファイルを見つけて、ターゲットcd
フォルダを作成して/tmp/newstruct
ファイルを移動します。
cd /tmp/oldstruct
find ./ -type f -regextype posix-basic -regex '.*[0-9]\\{3\\}' |
while read i; do
dest=/tmp/newstruct/$(dirname $i)
mkdir -vp $dest
mv -v $i $dest
done
実際に実行する前にとを追加して、期待どおりに機能していることを確認することをお勧めしますmkdir
。mv
echo
3桁の数字を否定するには、doと入力します! -regex
。
これはrsyncに依存するより簡単な方法です。しかし、rsync
見つかったすべてのファイルを呼び出すので、確かに効率的ではありません。
find ./ -type f -regextype posix-basic -regex '.*[0-9]\{3\}' --exec rsync -av --remove-source-files --relative {} /tmp/newstruct