シンボリックリンクとファイル名リストを使用してターゲットファイルをコピーする方法

シンボリックリンクとファイル名リストを使用してターゲットファイルをコピーする方法

たくさんのファイルをコピーしたいです。私は彼らの場所をtxtファイルの行と同じ名前の一連のシンボリックリンクとして保存します。だから私はcpを使ってreadlinkとcat/pipe機能を組み合わせる必要があります。この組み合わせに関する他の質問を見たことはありません。

注文する:

cp $(readlink < /path/list.txt) -t /path/targetdir

次のようにreadlinkの引数にシンボリックリンク名を明示的に使用した場合は、より簡単な例が機能します(ただし、これを手動で実行するにはファイル名が多すぎます)。

cp $(readlink symlink1 symlink2) -t /path/targetdir

問題は「readlink」とパイプを組み合わせる方法ですが、何がわかりません。

編集:以下は、list.txtファイルの最初の行の内容の例です。

symlink_13243

symlink_39184

symlink_83204

各行は一意のシンボリックリンク名です。

答え1

GNUを使用しxargsて、次の操作を行いますreadlink

</path/list.txt xargs -d'\n' readlink -z | xargs -0 cp -t /path/targetdir

の行ごとに1つのシンボリックリンクを使用して、最初のシンボリックリンクの区切り文字としてlist.txt改行文字()を選択し、出力を別のシンボリックリンクにパイプします。今回は、null文字を使用してパス(および)を終了します。\nxargsreadlinkxargs-z-0

答え2

代わりにループを使用してcp -L動作しますreadlink。シンボリックリンクを含むフォルダから次のコマンドを実行しました。

for item in $(cat /path/dir/list.txt); do cp -L $item /path/targetdir; done

また、txtファイルのエンコードにも問題があります(RでビルドするがWindowsシステムでビルドすることに関連しています)。

関連情報