2017-07-14 5 views
0

フォルダ内のすべてのファイル( "MySourceDir")をaで指定された対応するパスに戻して移動コマンドを元に戻したい。 txtファイル(「ListOfFilePaths.txt)。彼らが最初にあったディレクトリを示す例:私はこれらの各ファイルのファイルパスを含むテキストファイルを持っている複数のファイルをフォルダの一覧に移動する(移動コマンドを元に戻す)

MySourceDir 

File1.txt 
File2.txt 
File3.txt 
. 
. 
. 

については

、これにより、必要

ListOfFilePaths.txt 

/path/to/dirA/File1.txt 
/path/to/dirB/File2.txt 
/path/to/dirC/File3.txt 

おそらく2つの方法でこれを行うことができます。ループを作成して各ファイルのディレクトリパスをgrepし、それを対応するgreppedディレクトリパスに移動するか、または2)ディレクトリパスから "File#.txt"部分を削除して、ファイル内の各ファイルに対してmvコマンドを実行します。 n番目のファイルがn番目のディレクトリに移動されるようにします。

どちらの場合でも、私はbashでループを書くことに慣れていないので、どんな助けでも大歓迎です! (同様に、また、タイムスタンプ変わらない:-)を保ち、背中の代わりにそれらを移動元のフォルダへコピーにこれらのファイルをコマンドをいただければ幸いです)

+0

。次に、そのファイルを、行ごとに1つのmvコマンドを保持するスクリプトに変換するだけです。何かを制御して確認することができます。ループはありません。あなたは何をしているのか分かりません。 – arkascha

答えて

0

私が理解から、あなたがする必要があります。

    テキストファイルによる
  • ループ
  • 最後のスラッシュ(あなたのファイル名を与える)
  • がライン
  • から先のディレクトリを取得した後、テキストを抽出、行を取得するには、ファイルをコピーします。ソースディレクトリからDEST DIR

以下のコードに役立つはずである:

while read line; do 
    fileName=$(basename $line) 
    dirName=$(dirname $line) 
    cp SourceDir/"$fileName" "$dirName" 
done < ListOfFilePaths.txt 

ファイルパスからファイル名を抽出basenamedirnameは、ファイルパスからdirを抽出します。

参考文献:最も簡単にはブロック選択と複数行入力を提供する優れたテキストエディタを使用することです

https://ss64.com/bash/dirname.html

https://linux.die.net/man/1/basename

+0

ありがとうございます。 "cp"コマンドの代わりに "echo fileName"を実行すると、このエラーが表示されます。 'fileName:コマンドが見つかりません。 dirName:コマンドが見つかりませんでした。 ' – AHegde

+0

@AHEGde 'echo" $ fileName ";'と 'echo" $ dirName ";'を実行する必要があります。 – mfisher91

関連する問題