私は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
すべてのファイルとサブフォルダを繰り返しコピーすることができます。途中では、すべてのファイル名(相対)を書き込むことができます。folder1
folder2
tee
folder1
outputfile
cd folder1 && find . -depth | tee outputfile | cpio -pdm folder2
ソースフォルダに基づいてファイル名を取得するには、このコマンドがcd folder1
必要です。cpio
folder2
絶対または相対として指定する必要がありますfolder1
。
ファイルのみコピーするには、find
次のコマンドを変更します。
... find . -type f -maxdepth 1 ...