次のフォルダ構造があります。
Service
|
-- App1
|
--- bin
|
--- file1
|
--- file2
|
--App2
|
--- bin
|
--- file1
|
--- file2
|
--- file3
|
--App3
|
--- bin
|
--- file1
|
--- file2
GIT履歴を維持しながら、Appフォルダのルート上のファイルだけをそのbinフォルダに移動したいと思います。したがって、最終結果は次のようになります。
Service
|
-- App1
|
--- bin
|
--- file1
|
--- file2
|
--App2
|
--- bin
|
--- file1
|
--- file2
|
--- file3
|
--App3
|
--- bin
|
--- file1
|
--- file2
私は次を試しました...
#!/bin/bash
dir1="/c/Service"
subs=`ls $dir1`
for i in $subs; do
git mv $dir1/$i/* $dir1/$i/bin/
done
...しかし、次のエラーが表示されます。
致命的:ディレクトリ自体を移動できません。
致命的:無効なパス '/c':対応するファイルまたはディレクトリがありません。
助けてくれてありがとう。
答え1
ディレクトリの親ディレクトリでService
次のことができます。
$ for file in Service/*/*; do
if [[ -f "$file" ]]; then
echo mv "$file" "$(dirname -- "$file")/bin"
fi
done
mv Service/App1/file1 Service/App1/bin
mv Service/App1/file2 Service/App1/bin
mv Service/App2/file1 Service/App2/bin
mv Service/App2/file2 Service/App2/bin
mv Service/App2/file3 Service/App2/bin
mv Service/App3/file1 Service/App3/bin
mv Service/App3/file2 Service/App3/bin
正しく表示されたら、削除してecho
やり直して実際にファイルを移動してください。
上記の方法を参照してください救うリクエストに応じてgitレコード。これを維持したくなく、代わりにこのコマンドをgitの履歴に追加するには、代わりに次のようgit mv
に使用しますmv
。
for file in Service/*/*; do
if [[ -f "$file" ]]; then
echo git mv "$file" "$(dirname -- "$file")/bin"
fi
done