たくさんのファイルをコピーしたいです。私は彼らの場所を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文字を使用してパス(および)を終了します。\n
xargs
readlink
xargs
-z
-0
答え2
代わりにループを使用してcp -L
動作しますreadlink
。シンボリックリンクを含むフォルダから次のコマンドを実行しました。
for item in $(cat /path/dir/list.txt); do cp -L $item /path/targetdir; done
また、txtファイルのエンコードにも問題があります(RでビルドするがWindowsシステムでビルドすることに関連しています)。