$ 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 l
file
一行ずつ読んでみましょう。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/