あるフォルダから別のフォルダにコピーされた各ファイルのファイルパスを取得します。

あるフォルダから別のフォルダにコピーされた各ファイルのファイルパスを取得します。

私はUbuntu 18.04 LTSを使用しており、あるフォルダから別のフォルダにファイルをコピーしたいので、フォルダ1からフォルダ2にコピーされた各ファイルのファイルパスをスペースを区切り文字として3番目のファイルに保存しようとしています。
注:cpコマンドは出力を返さないため、ファイルに保存すると機能しません。

端末から実行できるコマンドまたはスクリプトの組み合わせを使用できます。

他のソフトウェアを提案しないでください。

答え1

POSIXコマンドを使用し、ファイル名とディレクトリ名に改行文字が含まれていないとします。

src=/some/dir
dst=/some/other/dir
file_list=/path/to/list.txt
(cd -P -- "$src" && find . |
  tee -- "$file_list" |
  pax -rwdpe -- "$dst")

$srcパスはまたはディレクトリに相対的です$dst(既存に存在する必要があります)。

GNUの実装cp(Ubuntuに見られるように)には、-v自分が何をしているのかを知らせるオプションがあります。

LC_ALL=C cp -va -- "$src" "$dst" > "$file_list"

以下を含むコンテンツを作成しますlist.txt

'/some/dir' -> '/some/other/dir'
'/some/dir/file' -> '/some/other/dir/file'
[...]

別のオプションは次のものを使用することです(標準コマンドではありませんが、UbuntuはtarデフォルトでGNUに付属しています)。tar

(cd -P -- "$src" && tar cf - .) |
  (cd -P -- "$dst" && tar xvf - > "$file_list")

答え2

findとを組み合わせてから、cpioすべてのファイルとサブフォルダを繰り返しコピーすることができます。途中では、すべてのファイル名(相対)を書き込むことができます。folder1folder2teefolder1outputfile

cd folder1 && find . -depth | tee outputfile | cpio -pdm folder2

ソースフォルダに基づいてファイル名を取得するには、このコマンドがcd folder1必要です。cpio

folder2絶対または相対として指定する必要がありますfolder1

ファイルのみコピーするには、find次のコマンドを変更します。

... find . -type f -maxdepth 1 ...

関連情報