ファイルを2つのディレクトリに戻す

ファイルを2つのディレクトリに戻す
$ cat file
/tmp/foldera/folderb/folderc/file1
/tmp/folderc/folderd/foldere/file2
/tmp/folderf/folderg/folderh/file3

このファイルを次に移動する必要があります。

/tmp/foldera/
/tmp/folderc/
/tmp/folderf/

これを行うには、ループまたは簡単で便利な方法を使用してください。

答え1

whileループを使用してください:

while IFS= read -r l; do
  mv -v -- "$l" "${l%/*/*/*}/"
done <file
  • while IFS= read -r lfile一行ずつ読んでみましょう。
  • mv -vファイルを移動して詳細を -v教えてください。mv
    • "$l"ソースファイル名
    • "${l%/*/*/*}/"宛先ディレクトリです。/*/*/*ファイル名の末尾とその間にある3つのスラッシュ()を削除します。

これで以下が生成されます。

»/tmp/foldera/folderb/folderc/file1“ -> »/tmp/foldera/file1“
»/tmp/folderc/folderd/foldere/file2“ -> »/tmp/folderc/file2“
»/tmp/folderf/folderg/folderh/file3“ -> »/tmp/folderf/file3“

答え2

Chaosに似た答えを提案したいのですがdirname

while IFS= read -r l; do
    mv -- "$l" "$(dirname -- "$(dirname -- "$l")")"
done <file

dirnameレポートファイル/ディレクトリがあるディレクトリへのパス。これは、ファイルに次のエントリがある場合にディレクトリの移動を処理できるという利点があります。

/tmp/foldera/folderb/folderc/folderd/

関連情報