Linux ファイルシステム
1500 個のフォルダーがあるディレクトリがあります。1 つの列に 1500 個のフォルダー名があり、次の列に一意の ID がある Excel ドキュメントを使用したいと考えています。スクリプトを作成して、フォルダーの名前を新しい一意の ID に変更したいと考えています。スクリプトの書き方はわかりませんが、とても簡単そうなので、どなたか助けていただけないでしょうか。オンラインのスクリプトへのリンクを教えていただけませんか (まだ見つけられていません)。
Look at volume A for folder Var#1 (from excel)
if present on Volume A then mv Var#1 to Var#2 (from excel)
loop and grab next line of excel doc
答え1
はい、ここにあります:
$(cat test.csv) 内の i について
する
dir1=$(echo $i|sed 's/,.*//')
dir2=$(echo $i|sed 's/.*,//')
[ -d $dir1]の場合
それから
[ -d $dir2 ]の場合
それから
$dir2 が存在することをエコーし、$dir1 から $dir2 への移動をスキップします
それ以外
mv $dir1 $dir2
フィ
フィ
終わり
答え2
私は Linux、Unix、Mac のユーザーで、Perl および Bash スクリプトを書いています。Power Shell または Cygwin をお持ちの場合は、次の操作を実行できます。Windows でも同様の操作が可能な場合がありますが、期待しないでください。
全部やらなくても、これを使って好きなように改造できると思います...
- データを csv ファイル (somefile.csv) に保存します。
- bashシェルの場合
bash> temp_line の
cat somefile.csv
する
echo mv $temp_line |sed 's/,/ /'
完了 >somefile.sh
期待どおりに実行されるかどうかが確実になるまで、次の行を実行しないでください。
bash>. ./somefile.sh
これで完了です... 注記: これは簡単なハックです。エラー チェックなどをさらに追加して記述することもできますが、これは思いつきです:) 遭遇する可能性のあるもう 1 つの問題は、ファイル名やディレクトリ名にスペースが含まれていることです。引用符を追加するだけです。ディレクトリが存在するかどうかを確認する必要がある場合は、次のような if ステートメントを追加できます。
bash>if [ -d 'dir_name' ]; then ... ;fi
書かなくても十分な情報になるはずです。後でインスピレーションを受けて、フォローアップの投稿でこれを書くかもしれません。
答え3
これは答えではないただし、コメントでは適切な書式設定やこれほど長いテキストが許可されないため、1 つとして入力します。
明らかに、既存のフォルダーの名前は一意です (すべてが同じスーパーフォルダー内にあるか、@nerdwaller が指摘したように完全なパス名として提示されていると仮定)。また、2 番目の列の一意の ID は、定義により一意です。2 つの列は一意 (重複なし) ですか? 次のデータを考えてみましょう。
古い名前 新しい固有ID 生きるか死ぬか、1 それが問題だ。2 クイックブラウンフォックス3 怠け者の犬を飛び越える。4 ⋮ ⋮ 深夜の憂鬱、40 考えながら、41 弱って疲れた、42 ⋮ ⋮ 56の答え 人生の究極の問い、57 宇宙、そしてすべては 58 42 59 などなど...60
weak_and_weary,
に名前を変更しようとすると42
、既存のフォルダーと衝突します42
。おそらく、これに対処する最善の方法は、古いフォルダー名を調べて、一意の ID のパターンに一致する名前を探し、手動で処理することです。